fx

Hex Artifact Content
Login
Bounty program for improvements to Tcl and certain Tcl packages.

Artifact 0e7991a07703917920e3386b98272ecdb02f14b1:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 74  #!/usr/bin/env t
0010: 63 6c 73 68 0a 23 23 20 2d 2a 2d 20 74 63 6c 20  clsh.## -*- tcl 
0020: 2d 2a 2d 0a 23 20 23 20 23 23 20 23 23 23 20 23  -*-.# # ## ### #
0030: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
0040: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23  ########### ####
0050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0060: 23 23 0a 0a 23 20 40 40 20 4d 65 74 61 20 42 65  ##..# @@ Meta Be
0070: 67 69 6e 0a 23 20 50 61 63 6b 61 67 65 20 66 78  gin.# Package fx
0080: 20 3f 0a 23 20 4d 65 74 61 20 61 75 74 68 6f 72   ?.# Meta author
0090: 20 20 20 20 20 20 7b 41 6e 64 72 65 61 73 20 4b        {Andreas K
00a0: 75 70 72 69 65 73 7d 0a 23 20 4d 65 74 61 20 63  upries}.# Meta c
00b0: 61 74 65 67 6f 72 79 20 20 20 20 3f 0a 23 20 4d  ategory    ?.# M
00c0: 65 74 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20  eta description 
00d0: 3f 0a 23 20 4d 65 74 61 20 6c 6f 63 61 74 69 6f  ?.# Meta locatio
00e0: 6e 20 20 20 20 68 74 74 70 3a 2f 63 6f 72 65 2e  n    http:/core.
00f0: 74 63 6c 2e 74 6b 2f 61 6b 75 70 72 69 65 73 2f  tcl.tk/akupries/
0100: 66 78 0a 23 20 4d 65 74 61 20 70 6c 61 74 66 6f  fx.# Meta platfo
0110: 72 6d 20 20 20 20 74 63 6c 0a 23 20 4d 65 74 61  rm    tcl.# Meta
0120: 20 72 65 71 75 69 72 65 20 20 20 20 20 73 71 6c   require     sql
0130: 69 74 65 33 0a 23 20 4d 65 74 61 20 72 65 71 75  ite3.# Meta requ
0140: 69 72 65 20 20 20 20 20 63 6d 64 72 0a 23 20 4d  ire     cmdr.# M
0150: 65 74 61 20 72 65 71 75 69 72 65 20 20 20 20 20  eta require     
0160: 7b 54 63 6c 20 38 2e 35 2d 7d 0a 23 20 4d 65 74  {Tcl 8.5-}.# Met
0170: 61 20 72 65 71 75 69 72 65 20 20 20 20 20 6c 61  a require     la
0180: 6d 62 64 61 0a 23 20 4d 65 74 61 20 72 65 71 75  mbda.# Meta requ
0190: 69 72 65 20 20 20 20 20 66 78 3a 3a 66 6f 73 73  ire     fx::foss
01a0: 69 6c 0a 23 20 4d 65 74 61 20 72 65 71 75 69 72  il.# Meta requir
01b0: 65 20 20 20 20 20 66 78 3a 3a 63 6f 6e 66 69 67  e     fx::config
01c0: 0a 23 20 4d 65 74 61 20 72 65 71 75 69 72 65 20  .# Meta require 
01d0: 20 20 20 20 66 78 3a 3a 65 6e 75 6d 0a 23 20 4d      fx::enum.# M
01e0: 65 74 61 20 72 65 71 75 69 72 65 20 20 20 20 20  eta require     
01f0: 66 78 3a 3a 72 65 70 6f 72 74 0a 23 20 4d 65 74  fx::report.# Met
0200: 61 20 73 75 62 6a 65 63 74 20 20 20 20 20 3f 0a  a subject     ?.
0210: 23 20 4d 65 74 61 20 73 75 6d 6d 61 72 79 20 20  # Meta summary  
0220: 20 20 20 3f 0a 23 20 40 40 20 4d 65 74 61 20 45     ?.# @@ Meta E
0230: 6e 64 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75  nd..package requ
0240: 69 72 65 20 54 63 6c 20 38 2e 35 0a 70 61 63 6b  ire Tcl 8.5.pack
0250: 61 67 65 20 72 65 71 75 69 72 65 20 63 6d 64 72  age require cmdr
0260: 3a 3a 63 6f 6c 6f 72 20 3b 20 23 20 63 6f 6c 6f  ::color ; # colo
0270: 72 20 61 63 74 69 76 61 74 69 6f 6e 0a 70 61 63  r activation.pac
0280: 6b 61 67 65 20 72 65 71 75 69 72 65 20 63 6d 64  kage require cmd
0290: 72 3a 3a 68 69 73 74 6f 72 79 0a 70 61 63 6b 61  r::history.packa
02a0: 67 65 20 72 65 71 75 69 72 65 20 63 6d 64 72 3a  ge require cmdr:
02b0: 3a 68 65 6c 70 3a 3a 74 63 6c 0a 70 61 63 6b 61  :help::tcl.packa
02c0: 67 65 20 72 65 71 75 69 72 65 20 63 6d 64 72 3a  ge require cmdr:
02d0: 3a 61 63 74 6f 72 20 31 2e 33 20 3b 23 20 4e 65  :actor 1.3 ;# Ne
02e0: 65 64 20 2d 65 78 74 65 6e 64 20 73 75 70 70 6f  ed -extend suppo
02f0: 72 74 20 66 6f 72 20 63 6f 6d 6d 6f 6e 2f 75 73  rt for common/us
0300: 65 20 62 6c 6f 63 6b 73 2e 0a 70 61 63 6b 61 67  e blocks..packag
0310: 65 20 72 65 71 75 69 72 65 20 63 6d 64 72 0a 70  e require cmdr.p
0320: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 64  ackage require d
0330: 65 62 75 67 0a 70 61 63 6b 61 67 65 20 72 65 71  ebug.package req
0340: 75 69 72 65 20 64 65 62 75 67 3a 3a 63 61 6c 6c  uire debug::call
0350: 65 72 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  er.package requi
0360: 72 65 20 6c 61 6d 62 64 61 0a 0a 70 61 63 6b 61  re lambda..packa
0370: 67 65 20 72 65 71 75 69 72 65 20 66 78 3a 3a 73  ge require fx::s
0380: 65 65 6e 20 20 3b 20 23 20 73 65 74 2d 70 72 6f  een  ; # set-pro
0390: 67 72 65 73 73 0a 0a 23 20 23 20 23 23 20 23 23  gress..# # ## ##
03a0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
03b0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
03c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
03d0: 23 23 23 23 23 0a 0a 64 65 62 75 67 20 6c 65 76  #####..debug lev
03e0: 65 6c 20 20 66 78 0a 64 65 62 75 67 20 70 72 65  el  fx.debug pre
03f0: 66 69 78 20 66 78 20 7b 5b 64 65 62 75 67 20 63  fix fx {[debug c
0400: 61 6c 6c 65 72 5d 20 7c 20 7d 0a 0a 23 20 23 20  aller] | }..# # 
0410: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
0420: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0430: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0440: 23 23 23 23 23 23 23 23 23 23 0a 0a 6e 61 6d 65  ##########..name
0450: 73 70 61 63 65 20 65 76 61 6c 20 66 78 20 7b 0a  space eval fx {.
0460: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78      namespace ex
0470: 70 6f 72 74 20 6d 61 69 6e 0a 20 20 20 20 6e 61  port main.    na
0480: 6d 65 73 70 61 63 65 20 65 6e 73 65 6d 62 6c 65  mespace ensemble
0490: 20 63 72 65 61 74 65 0a 7d 0a 0a 23 20 23 20 23   create.}..# # #
04a0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
04b0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
04c0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
04d0: 23 23 23 23 23 23 23 23 23 0a 0a 70 72 6f 63 20  #########..proc 
04e0: 3a 3a 66 78 3a 3a 6d 61 69 6e 20 7b 61 72 67 76  ::fx::main {argv
04f0: 7d 20 7b 0a 20 20 20 20 64 65 62 75 67 2e 66 78  } {.    debug.fx
0500: 20 7b 7d 0a 20 20 20 20 74 72 79 20 7b 0a 09 66   {}.    try {..f
0510: 78 20 64 6f 20 7b 2a 7d 24 61 72 67 76 0a 20 20  x do {*}$argv.  
0520: 20 20 7d 20 74 72 61 70 20 7b 43 4d 44 52 20 43    } trap {CMDR C
0530: 4f 4e 46 49 47 20 57 52 4f 4e 47 2d 41 52 47 53  ONFIG WRONG-ARGS
0540: 7d 20 7b 65 20 6f 7d 20 2d 20 5c 0a 20 20 20 20  } {e o} - \.    
0550: 20 20 74 72 61 70 20 7b 43 4d 44 52 20 43 4f 4e    trap {CMDR CON
0560: 46 49 47 20 42 41 44 20 4f 50 54 49 4f 4e 7d 20  FIG BAD OPTION} 
0570: 7b 65 20 6f 7d 20 2d 20 5c 0a 20 20 20 20 20 20  {e o} - \.      
0580: 74 72 61 70 20 7b 43 4d 44 52 20 56 41 4c 49 44  trap {CMDR VALID
0590: 41 54 45 7d 20 7b 65 20 6f 7d 20 2d 20 5c 0a 20  ATE} {e o} - \. 
05a0: 20 20 20 20 20 74 72 61 70 20 7b 43 4d 44 52 20       trap {CMDR 
05b0: 41 43 54 49 4f 4e 20 55 4e 4b 4e 4f 57 4e 7d 20  ACTION UNKNOWN} 
05c0: 7b 65 20 6f 7d 20 2d 20 5c 0a 20 20 20 20 20 20  {e o} - \.      
05d0: 74 72 61 70 20 7b 43 4d 44 52 20 41 43 54 49 4f  trap {CMDR ACTIO
05e0: 4e 20 42 41 44 7d 20 7b 65 20 6f 7d 20 2d 20 5c  N BAD} {e o} - \
05f0: 0a 20 20 20 20 20 20 74 72 61 70 20 7b 43 4d 44  .      trap {CMD
0600: 52 20 56 41 4c 49 44 41 54 45 7d 20 7b 65 20 6f  R VALIDATE} {e o
0610: 7d 20 2d 20 5c 0a 20 20 20 20 20 20 74 72 61 70  } - \.      trap
0620: 20 7b 43 4d 44 52 20 50 41 52 41 4d 45 54 45 52   {CMDR PARAMETER
0630: 20 4c 4f 43 4b 45 44 7d 20 7b 65 20 6f 7d 20 2d   LOCKED} {e o} -
0640: 20 5c 0a 20 20 20 20 20 20 74 72 61 70 20 7b 43   \.      trap {C
0650: 4d 44 52 20 44 4f 20 55 4e 4b 4e 4f 57 4e 7d 20  MDR DO UNKNOWN} 
0660: 7b 65 20 6f 7d 20 7b 0a 09 64 65 62 75 67 2e 66  {e o} {..debug.f
0670: 78 20 7b 74 72 61 70 20 2d 20 63 6d 64 6c 69 6e  x {trap - cmdlin
0680: 65 20 75 73 65 72 20 65 72 72 6f 72 7d 0a 09 70  e user error}..p
0690: 75 74 73 20 73 74 64 65 72 72 20 22 24 3a 3a 61  uts stderr "$::a
06a0: 72 67 76 30 20 63 6d 64 72 3a 20 5b 63 6d 64 72  rgv0 cmdr: [cmdr
06b0: 20 63 6f 6c 6f 72 20 65 72 72 6f 72 20 24 65 5d   color error $e]
06c0: 22 0a 09 72 65 74 75 72 6e 20 31 0a 0a 20 20 20  "..return 1..   
06d0: 20 7d 20 74 72 61 70 20 7b 46 58 7d 20 7b 65 20   } trap {FX} {e 
06e0: 6f 7d 20 7b 0a 09 64 65 62 75 67 2e 66 78 20 7b  o} {..debug.fx {
06f0: 74 72 61 70 20 2d 20 6f 74 68 65 72 20 75 73 65  trap - other use
0700: 72 20 65 72 72 6f 72 7d 0a 09 70 75 74 73 20 73  r error}..puts s
0710: 74 64 65 72 72 20 22 24 3a 3a 61 72 67 76 30 20  tderr "$::argv0 
0720: 67 65 6e 65 72 61 6c 3a 20 5b 63 6d 64 72 20 63  general: [cmdr c
0730: 6f 6c 6f 72 20 65 72 72 6f 72 20 24 65 5d 22 0a  olor error $e]".
0740: 09 72 65 74 75 72 6e 20 31 0a 09 0a 20 20 20 20  .return 1...    
0750: 7d 20 6f 6e 20 65 72 72 6f 72 20 7b 65 20 6f 7d  } on error {e o}
0760: 20 7b 0a 09 64 65 62 75 67 2e 66 78 20 7b 74 72   {..debug.fx {tr
0770: 61 70 20 2d 20 67 65 6e 65 72 61 6c 2c 20 69 6e  ap - general, in
0780: 74 65 72 6e 61 6c 20 65 72 72 6f 72 7d 0a 09 64  ternal error}..d
0790: 65 62 75 67 2e 66 78 20 7b 5b 64 65 62 75 67 20  ebug.fx {[debug 
07a0: 70 64 69 63 74 20 24 6f 5d 7d 0a 09 23 20 54 4f  pdict $o]}..# TO
07b0: 44 4f 3a 20 6e 69 63 65 72 20 66 6f 72 6d 61 74  DO: nicer format
07c0: 74 69 6e 67 20 6f 66 20 69 6e 74 65 72 6e 61 6c  ting of internal
07d0: 20 65 72 72 6f 72 73 2e 0a 09 70 75 74 73 20 73   errors...puts s
07e0: 74 64 65 72 72 20 5b 63 6d 64 72 20 63 6f 6c 6f  tderr [cmdr colo
07f0: 72 20 65 72 72 6f 72 20 24 3a 3a 65 72 72 6f 72  r error $::error
0800: 49 6e 66 6f 5d 0a 09 6d 61 69 6c 2d 65 72 72 6f  Info]..mail-erro
0810: 72 20 24 3a 3a 65 72 72 6f 72 49 6e 66 6f 0a 09  r $::errorInfo..
0820: 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a  return 1.    }..
0830: 20 20 20 20 64 65 62 75 67 2e 66 78 20 7b 64 6f      debug.fx {do
0840: 6e 65 2c 20 6f 6b 7d 0a 20 20 20 20 72 65 74 75  ne, ok}.    retu
0850: 72 6e 20 30 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 66  rn 0.}..proc ::f
0860: 78 3a 3a 6d 61 69 6c 2d 65 72 72 6f 72 20 7b 65  x::mail-error {e
0870: 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 65  } {.    global e
0880: 6e 76 0a 0a 20 20 20 20 23 20 4d 61 69 6c 69 6e  nv..    # Mailin
0890: 67 20 74 68 65 20 73 74 61 63 6b 74 72 61 63 65  g the stacktrace
08a0: 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65 64   can be disabled
08b0: 20 66 6f 72 6d 20 74 68 65 20 65 6e 76 69 72 6f   form the enviro
08c0: 6e 6d 65 6e 74 2e 0a 20 20 20 20 23 20 43 75 72  nment..    # Cur
08d0: 72 65 6e 74 20 75 73 65 72 20 6f 66 20 74 68 69  rent user of thi
08e0: 73 20 62 65 68 61 76 69 6f 75 72 3a 20 54 65 73  s behaviour: Tes
08f0: 74 73 75 69 74 65 2e 0a 20 20 20 20 69 66 20 7b  tsuite..    if {
0900: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 6e 76  [info exists env
0910: 28 46 58 5f 4d 41 49 4c 5f 53 54 41 43 4b 54 52  (FX_MAIL_STACKTR
0920: 41 43 45 29 5d 20 26 26 20 21 24 65 6e 76 28 46  ACE)] && !$env(F
0930: 58 5f 4d 41 49 4c 5f 53 54 41 43 4b 54 52 41 43  X_MAIL_STACKTRAC
0940: 45 29 7d 20 7b 0a 09 72 65 74 75 72 6e 0a 20 20  E)} {..return.  
0950: 20 20 7d 0a 0a 20 20 20 20 70 61 63 6b 61 67 65    }..    package
0960: 20 72 65 71 75 69 72 65 20 66 78 3a 3a 66 6f 73   require fx::fos
0970: 73 69 6c 0a 20 20 20 20 70 61 63 6b 61 67 65 20  sil.    package 
0980: 72 65 71 75 69 72 65 20 66 78 3a 3a 6d 61 69 6c  require fx::mail
0990: 65 72 0a 20 20 20 20 70 61 63 6b 61 67 65 20 72  er.    package r
09a0: 65 71 75 69 72 65 20 66 78 3a 3a 6d 61 69 6c 67  equire fx::mailg
09b0: 65 6e 0a 20 20 20 20 73 65 74 20 63 6f 6e 66 69  en.    set confi
09c0: 67 20 5b 3a 3a 66 78 20 6d 61 69 6c 65 72 20 67  g [::fx mailer g
09d0: 65 74 2d 63 6f 6e 66 69 67 5d 0a 20 20 20 20 73  et-config].    s
09e0: 65 74 20 61 64 6d 69 6e 20 20 5b 6c 69 6e 64 65  et admin  [linde
09f0: 78 20 5b 64 69 63 74 20 67 65 74 20 24 63 6f 6e  x [dict get $con
0a00: 66 69 67 20 2d 68 65 61 64 65 72 5d 20 65 6e 64  fig -header] end
0a10: 5d 0a 0a 20 20 20 20 3a 3a 66 78 20 6d 61 69 6c  ]..    ::fx mail
0a20: 67 65 6e 20 63 6f 6e 74 65 78 74 2d 70 75 73 68  gen context-push
0a30: 20 22 52 3a 20 20 5b 3a 3a 66 78 3a 3a 66 6f 73   "R:  [::fx::fos
0a40: 73 69 6c 20 72 65 70 6f 73 69 74 6f 72 79 2d 6c  sil repository-l
0a50: 6f 63 61 74 69 6f 6e 5d 22 0a 20 20 20 20 74 72  ocation]".    tr
0a60: 79 20 7b 0a 09 3a 3a 66 78 20 6d 61 69 6c 65 72  y {..::fx mailer
0a70: 20 73 65 6e 64 20 24 63 6f 6e 66 69 67 20 24 61   send $config $a
0a80: 64 6d 69 6e 20 5c 0a 09 20 20 20 20 5b 3a 3a 66  dmin \..    [::f
0a90: 78 20 6d 61 69 6c 67 65 6e 20 66 6f 72 2d 65 72  x mailgen for-er
0aa0: 72 6f 72 20 24 65 5d 20 6f 6e 0a 20 20 20 20 7d  ror $e] on.    }
0ab0: 20 66 69 6e 61 6c 6c 79 20 7b 0a 09 3a 3a 66 78   finally {..::fx
0ac0: 20 6d 61 69 6c 67 65 6e 20 63 6f 6e 74 65 78 74   mailgen context
0ad0: 2d 70 6f 70 0a 20 20 20 20 7d 0a 20 20 20 20 72  -pop.    }.    r
0ae0: 65 74 75 72 6e 0a 7d 0a 0a 23 20 23 20 23 23 20  eturn.}..# # ## 
0af0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
0b00: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0b10: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
0b20: 23 23 23 23 23 23 23 0a 23 23 20 53 75 70 70 6f  #######.## Suppo
0b30: 72 74 20 63 6f 6d 6d 61 6e 64 73 20 63 6f 6e 73  rt commands cons
0b40: 74 72 75 63 74 69 6e 67 20 67 6c 75 65 20 66 6f  tructing glue fo
0b50: 72 20 76 61 72 69 6f 75 73 20 63 61 6c 6c 62 61  r various callba
0b60: 63 6b 73 2e 0a 0a 70 72 6f 63 20 3a 3a 66 78 3a  cks...proc ::fx:
0b70: 3a 6e 6f 2d 73 65 61 72 63 68 20 7b 7d 20 7b 0a  :no-search {} {.
0b80: 20 20 20 20 6c 61 6d 62 64 61 20 7b 70 20 78 7d      lambda {p x}
0b90: 20 7b 0a 09 24 70 20 63 6f 6e 66 69 67 20 40 72   {..$p config @r
0ba0: 65 70 6f 73 69 74 6f 72 79 2d 61 63 74 69 76 65  epository-active
0bb0: 20 73 65 74 20 6f 66 66 0a 20 20 20 20 7d 0a 7d   set off.    }.}
0bc0: 0a 0a 23 20 4e 4f 54 45 3a 20 63 61 6c 6c 2c 20  ..# NOTE: call, 
0bd0: 76 74 2c 20 73 65 71 75 65 6e 63 65 2c 20 65 78  vt, sequence, ex
0be0: 63 6c 75 64 65 20 2d 20 50 6f 73 73 69 62 6c 65  clude - Possible
0bf0: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 63 6d 64   convenience cmd
0c00: 73 20 66 6f 72 20 43 6d 64 72 2e 0a 70 72 6f 63  s for Cmdr..proc
0c10: 20 3a 3a 66 78 3a 3a 63 61 6c 6c 20 7b 70 20 61   ::fx::call {p a
0c20: 72 67 73 7d 20 7b 0a 20 20 20 20 6c 61 6d 62 64  rgs} {.    lambd
0c30: 61 20 7b 70 20 61 72 67 73 7d 20 7b 0a 09 70 61  a {p args} {..pa
0c40: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 66 78  ckage require fx
0c50: 3a 3a 24 70 0a 09 66 78 3a 3a 24 70 20 7b 2a 7d  ::$p..fx::$p {*}
0c60: 24 61 72 67 73 0a 20 20 20 20 7d 20 24 70 20 7b  $args.    } $p {
0c70: 2a 7d 24 61 72 67 73 0a 7d 0a 0a 70 72 6f 63 20  *}$args.}..proc 
0c80: 3a 3a 66 78 3a 3a 76 74 20 7b 70 20 61 72 67 73  ::fx::vt {p args
0c90: 7d 20 7b 0a 20 20 20 20 6c 61 6d 62 64 61 20 7b  } {.    lambda {
0ca0: 70 20 61 72 67 73 7d 20 7b 0a 09 70 61 63 6b 61  p args} {..packa
0cb0: 67 65 20 72 65 71 75 69 72 65 20 66 78 3a 3a 76  ge require fx::v
0cc0: 61 6c 69 64 61 74 65 3a 3a 24 70 0a 09 66 78 3a  alidate::$p..fx:
0cd0: 3a 76 61 6c 69 64 61 74 65 3a 3a 24 70 20 7b 2a  :validate::$p {*
0ce0: 7d 24 61 72 67 73 0a 20 20 20 20 7d 20 24 70 20  }$args.    } $p 
0cf0: 7b 2a 7d 24 61 72 67 73 0a 7d 0a 0a 70 72 6f 63  {*}$args.}..proc
0d00: 20 3a 3a 66 78 3a 3a 73 65 71 75 65 6e 63 65 20   ::fx::sequence 
0d10: 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20 6c 61 6d  {args} {.    lam
0d20: 62 64 61 20 7b 63 6d 64 73 20 70 20 78 7d 20 7b  bda {cmds p x} {
0d30: 0a 09 66 6f 72 65 61 63 68 20 63 20 24 63 6d 64  ..foreach c $cmd
0d40: 73 20 7b 0a 09 20 20 20 20 7b 2a 7d 24 63 20 24  s {..    {*}$c $
0d50: 70 20 24 78 0a 09 7d 0a 20 20 20 20 7d 20 24 61  p $x..}.    } $a
0d60: 72 67 73 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 66 78  rgs.}..proc ::fx
0d70: 3a 3a 65 78 63 6c 75 64 65 20 7b 6c 6f 63 6b 65  ::exclude {locke
0d80: 64 7d 20 7b 0a 20 20 20 20 23 20 4a 75 6d 70 20  d} {.    # Jump 
0d90: 69 6e 74 6f 20 74 68 65 20 63 6f 6e 74 65 78 74  into the context
0da0: 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74 65   of the paramete
0db0: 72 20 69 6e 73 74 61 6e 63 65 20 63 75 72 72 65  r instance curre
0dc0: 6e 74 6c 79 0a 20 20 20 20 23 20 67 65 74 74 69  ntly.    # getti
0dd0: 6e 67 20 63 6f 6e 66 69 67 75 72 65 64 2e 20 41  ng configured. A
0de0: 74 20 74 68 65 20 74 69 6d 65 20 74 68 65 20 73  t the time the s
0df0: 70 65 63 20 69 73 20 65 78 65 63 75 74 65 64 20  pec is executed 
0e00: 74 68 69 6e 67 73 0a 20 20 20 20 23 20 72 65 67  things.    # reg
0e10: 61 72 64 69 6e 67 20 6e 61 6d 69 6e 67 20 61 72  arding naming ar
0e20: 65 20 69 6e 20 67 6f 6f 64 20 65 6e 6f 75 67 68  e in good enough
0e30: 20 73 68 61 70 65 20 74 6f 20 65 78 74 72 61 63   shape to extrac
0e40: 74 20 6e 61 6d 69 6e 67 0a 20 20 20 20 23 20 69  t naming.    # i
0e50: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 57 68 69 6c  nformation. Whil
0e60: 65 20 61 6c 69 61 73 65 73 20 66 6f 72 20 6f 70  e aliases for op
0e70: 74 69 6f 6e 73 20 61 72 65 20 6d 69 73 73 69 6e  tions are missin
0e80: 67 20 74 68 65 73 65 20 61 72 65 20 6f 66 0a 20  g these are of. 
0e90: 20 20 20 23 20 6e 6f 20 72 65 6c 65 76 61 6e 63     # no relevanc
0ea0: 65 20 74 6f 20 6f 75 72 20 70 75 72 70 6f 73 65  e to our purpose
0eb0: 20 68 65 72 65 20 65 69 74 68 65 72 2c 20 77 65   here either, we
0ec0: 20 6e 65 65 64 20 6f 6e 6c 79 20 74 68 65 0a 20   need only the. 
0ed0: 20 20 20 23 20 70 72 69 6d 61 72 79 20 6e 61 6d     # primary nam
0ee0: 65 2c 20 61 6e 64 20 74 68 61 74 20 69 73 20 69  e, and that is i
0ef0: 6e 69 74 69 61 6c 69 7a 65 64 20 62 79 20 6e 6f  nitialized by no
0f00: 77 2e 0a 0a 20 20 20 20 73 65 74 20 62 79 20 5b  w...    set by [
0f10: 75 70 6c 65 76 65 6c 20 32 20 7b 6d 79 20 74 68  uplevel 2 {my th
0f20: 65 2d 6e 61 6d 65 7d 5d 0a 20 20 20 20 6c 61 6d  e-name}].    lam
0f30: 62 64 61 20 7b 6c 6f 63 6b 65 64 20 62 79 20 70  bda {locked by p
0f40: 20 61 72 67 73 7d 20 7b 0a 09 23 64 65 62 75 67   args} {..#debug
0f50: 2e 63 6d 64 72 20 7b 7d 0a 09 24 70 20 63 6f 6e  .cmdr {}..$p con
0f60: 66 69 67 20 40 24 6c 6f 63 6b 65 64 20 6c 6f 63  fig @$locked loc
0f70: 6b 20 24 62 79 0a 20 20 20 20 7d 20 24 6c 6f 63  k $by.    } $loc
0f80: 6b 65 64 20 24 62 79 0a 7d 0a 0a 70 72 6f 63 20  ked $by.}..proc 
0f90: 3a 3a 66 78 3a 3a 6f 76 65 72 6c 61 79 20 7b 70  ::fx::overlay {p
0fa0: 61 74 68 20 61 72 67 73 7d 20 7b 0a 20 20 20 20  ath args} {.    
0fb0: 73 65 74 20 63 6d 64 20 7b 7d 0a 20 20 20 20 69  set cmd {}.    i
0fc0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67  f {[llength $arg
0fd0: 73 5d 7d 20 7b 0a 09 73 65 74 20 63 6d 64 20 22  s]} {..set cmd "
0fe0: 20 27 5b 6a 6f 69 6e 20 24 61 72 67 73 20 7b 20   '[join $args { 
0ff0: 7d 5d 27 22 0a 20 20 20 20 7d 0a 20 20 20 20 5b  }]'".    }.    [
1000: 3a 3a 66 78 3a 3a 66 78 20 66 69 6e 64 20 24 70  ::fx::fx find $p
1010: 61 74 68 5d 20 6c 65 61 72 6e 20 5b 73 75 62 73  ath] learn [subs
1020: 74 20 7b 0a 09 70 72 69 76 61 74 65 20 64 65 6c  t {..private del
1030: 65 67 61 74 65 20 7b 0a 09 20 20 20 20 73 65 63  egate {..    sec
1040: 74 69 6f 6e 20 43 6f 6e 76 65 6e 69 65 6e 63 65  tion Convenience
1050: 0a 09 20 20 20 20 64 65 73 63 72 69 70 74 69 6f  ..    descriptio
1060: 6e 20 7b 0a 09 09 44 65 6c 65 67 61 74 65 20 74  n {...Delegate t
1070: 68 65 20 63 6f 6d 6d 61 6e 64 24 63 6d 64 20 74  he command$cmd t
1080: 6f 20 74 68 65 20 6c 6f 63 61 6c 20 66 6f 73 73  o the local foss
1090: 69 6c 20 65 78 65 63 75 74 61 62 6c 65 2e 0a 09  il executable...
10a0: 20 20 20 20 7d 0a 09 20 20 20 20 69 6e 70 75 74      }..    input
10b0: 20 61 72 67 73 20 7b 0a 09 09 43 6f 6d 6d 61 6e   args {...Comman
10c0: 64 20 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  d and arguments 
10d0: 74 6f 20 64 65 6c 69 76 65 72 20 74 6f 20 63 6f  to deliver to co
10e0: 72 65 20 66 6f 73 73 69 6c 0a 09 20 20 20 20 7d  re fossil..    }
10f0: 20 7b 20 6c 69 73 74 20 3b 20 76 61 6c 69 64 61   { list ; valida
1100: 74 65 20 73 74 72 20 7d 0a 09 7d 20 7b 66 78 3a  te str }..} {fx:
1110: 3a 64 65 6c 65 67 61 74 65 20 7b 24 61 72 67 73  :delegate {$args
1120: 7d 7d 0a 09 23 20 41 6c 6c 20 63 6f 6d 6d 61 6e  }}..# All comman
1130: 64 73 20 6e 6f 74 20 6b 6e 6f 77 6e 20 74 6f 20  ds not known to 
1140: 66 78 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  fx at this level
1150: 20 61 72 65 20 64 65 6c 65 67 61 74 65 64 20 74   are delegated t
1160: 6f 0a 09 23 20 74 68 65 20 63 6f 72 65 20 66 6f  o..# the core fo
1170: 73 73 69 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e  ssil application
1180: 2e 0a 09 64 65 66 61 75 6c 74 0a 20 20 20 20 7d  ...default.    }
1190: 5d 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 66 78 3a 3a  ].}..proc ::fx::
11a0: 64 65 6c 65 67 61 74 65 20 7b 70 72 65 66 69 78  delegate {prefix
11b0: 20 63 6f 6e 66 69 67 7d 20 7b 0a 20 20 20 20 23   config} {.    #
11c0: 20 41 6e 79 20 69 73 73 75 65 73 20 6f 66 20 74   Any issues of t
11d0: 68 65 20 63 6f 6d 6d 61 6e 64 20 64 65 6c 65 67  he command deleg
11e0: 61 74 65 64 20 74 6f 20 61 72 65 20 69 74 73 20  ated to are its 
11f0: 70 72 6f 62 6c 65 6d 73 2c 20 61 6e 64 20 6e 6f  problems, and no
1200: 74 20 6f 75 72 73 2e 0a 20 20 20 20 23 20 49 74  t ours..    # It
1210: 20 77 69 6c 6c 20 68 61 76 65 20 74 68 65 6d 20   will have them 
1220: 72 65 70 6f 72 74 65 64 20 61 6c 72 65 61 64 79  reported already
1230: 20 61 6e 79 77 61 79 20 61 73 20 77 65 6c 6c 2e   anyway as well.
1240: 0a 20 20 20 20 63 61 74 63 68 20 7b 0a 09 65 78  .    catch {..ex
1250: 65 63 20 3e 40 20 73 74 64 6f 75 74 20 32 3e 40  ec >@ stdout 2>@
1260: 20 73 74 64 65 72 72 20 3c 40 20 73 74 64 69 6e   stderr <@ stdin
1270: 20 5c 0a 09 20 20 20 20 7b 2a 7d 5b 61 75 74 6f   \..    {*}[auto
1280: 5f 65 78 65 63 6f 6b 20 66 6f 73 73 69 6c 5d 20  _execok fossil] 
1290: 7b 2a 7d 24 70 72 65 66 69 78 20 7b 2a 7d 5b 24  {*}$prefix {*}[$
12a0: 63 6f 6e 66 69 67 20 40 61 72 67 73 5d 0a 20 20  config @args].  
12b0: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23    }.}..# # ## ##
12c0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
12d0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
12e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12f0: 23 23 23 23 23 0a 0a 66 78 20 73 65 65 6e 20 73  #####..fx seen s
1300: 65 74 2d 70 72 6f 67 72 65 73 73 20 5b 6c 61 6d  et-progress [lam
1310: 62 64 61 20 7b 74 65 78 74 7d 20 7b 0a 20 20 20  bda {text} {.   
1320: 20 73 65 74 20 65 65 6f 6c 20 5c 30 33 33 5c 5b   set eeol \033\[
1330: 4b 0a 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65  K.    puts -none
1340: 77 6c 69 6e 65 20 5c 72 24 65 65 6f 6c 5c 72 24  wline \r$eeol\r$
1350: 74 65 78 74 0a 20 20 20 20 66 6c 75 73 68 20 73  text.    flush s
1360: 74 64 6f 75 74 0a 7d 5d 0a 0a 23 20 23 20 23 23  tdout.}]..# # ##
1370: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
1380: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
1390: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
13a0: 23 23 23 23 23 23 23 23 0a 0a 63 6d 64 72 20 68  ########..cmdr h
13b0: 69 73 74 6f 72 79 20 69 6e 69 74 69 61 6c 2d 6c  istory initial-l
13c0: 69 6d 69 74 20 32 30 0a 63 6d 64 72 20 68 69 73  imit 20.cmdr his
13d0: 74 6f 72 79 20 73 61 76 65 2d 74 6f 20 20 20 20  tory save-to    
13e0: 20 20 20 7e 2f 2e 66 78 5f 68 69 73 74 6f 72 79     ~/.fx_history
13f0: 0a 0a 63 6d 64 72 20 63 72 65 61 74 65 20 66 78  ..cmdr create fx
1400: 3a 3a 66 78 20 5b 66 69 6c 65 20 74 61 69 6c 20  ::fx [file tail 
1410: 24 3a 3a 61 72 67 76 30 5d 20 7b 0a 20 20 20 20  $::argv0] {.    
1420: 23 23 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  ##.    # # ## ##
1430: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
1440: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
1450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1460: 23 23 23 23 0a 0a 20 20 20 20 64 65 73 63 72 69  ####..    descri
1470: 70 74 69 6f 6e 20 7b 0a 09 54 68 65 20 66 78 20  ption {..The fx 
1480: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 63 6c 69  command line cli
1490: 65 6e 74 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73  ent.    }..    s
14a0: 68 61 6e 64 6c 65 72 20 3a 3a 63 6d 64 72 3a 3a  handler ::cmdr::
14b0: 68 69 73 74 6f 72 79 3a 3a 61 74 74 61 63 68 0a  history::attach.
14c0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
14d0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
14e0: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
14f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1500: 23 23 0a 20 20 20 20 23 23 20 42 65 73 70 6f 6b  ##.    ## Bespok
1510: 65 20 63 61 74 65 67 6f 72 79 20 6f 72 64 65 72  e category order
1520: 69 6e 67 20 66 6f 72 20 68 65 6c 70 0a 20 20 20  ing for help.   
1530: 20 23 23 20 56 61 6c 75 65 73 20 61 72 65 20 70   ## Values are p
1540: 72 69 6f 72 69 74 69 65 73 2e 20 46 69 6e 61 6c  riorities. Final
1550: 20 6f 72 64 65 72 20 69 73 20 62 79 20 64 65 63   order is by dec
1560: 72 65 61 73 69 6e 67 20 70 72 69 6f 72 69 74 79  reasing priority
1570: 2e 0a 20 20 20 20 23 23 20 49 2e 65 2e 20 48 69  ..    ## I.e. Hi
1580: 67 68 65 73 74 20 70 72 69 6f 72 69 74 79 20 69  ghest priority i
1590: 73 20 70 72 69 6e 74 65 64 20 66 69 72 73 74 2c  s printed first,
15a0: 20 61 74 20 74 68 65 20 74 6f 70 2c 20 62 65 67   at the top, beg
15b0: 69 6e 6e 69 6e 67 2e 0a 0a 20 20 20 20 63 6f 6d  inning...    com
15c0: 6d 6f 6e 20 2a 63 61 74 65 67 6f 72 79 2d 6f 72  mon *category-or
15d0: 64 65 72 2a 20 7b 0a 09 43 6f 6e 76 65 6e 69 65  der* {..Convenie
15e0: 6e 63 65 20 2d 38 39 30 30 0a 09 41 64 76 61 6e  nce -8900..Advan
15f0: 63 65 64 20 20 20 20 2d 39 30 30 30 0a 20 20 20  ced    -9000.   
1600: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
1610: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
1620: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
1630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1640: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f  ######.    ## Co
1650: 6d 6d 6f 6e 20 70 69 65 63 65 73 20 61 63 72 6f  mmon pieces acro
1660: 73 73 20 74 68 65 20 76 61 72 69 6f 75 73 20 63  ss the various c
1670: 6f 6d 6d 61 6e 64 73 2e 0a 0a 20 20 20 20 63 6f  ommands...    co
1680: 6d 6d 6f 6e 20 2e 72 65 70 6f 73 69 74 6f 72 79  mmon .repository
1690: 20 7b 0a 09 73 74 61 74 65 20 72 65 70 6f 73 69   {..state reposi
16a0: 74 6f 72 79 2d 61 63 74 69 76 65 20 7b 0a 09 20  tory-active {.. 
16b0: 20 20 20 54 68 69 73 20 68 69 64 64 65 6e 20 66     This hidden f
16c0: 69 65 6c 64 20 63 61 6e 20 62 65 20 75 73 65 64  ield can be used
16d0: 20 62 79 20 6f 74 68 65 72 20 66 69 65 6c 64 73   by other fields
16e0: 20 74 6f 20 64 69 73 61 62 6c 65 0a 09 20 20 20   to disable..   
16f0: 20 74 68 65 20 73 65 61 72 63 68 20 66 6f 72 20   the search for 
1700: 61 20 6c 6f 63 61 6c 20 66 6f 73 73 69 6c 20 72  a local fossil r
1710: 65 70 6f 73 69 74 6f 72 79 2e 20 54 68 69 73 20  epository. This 
1720: 69 73 20 66 6f 72 20 75 73 65 0a 09 20 20 20 20  is for use..    
1730: 62 79 20 61 6c 6c 20 63 6f 6d 6d 61 6e 64 73 20  by all commands 
1740: 77 68 69 63 68 20 68 61 76 65 20 67 6c 6f 62 61  which have globa
1750: 6c 20 61 6e 64 20 6c 6f 63 61 6c 20 6f 70 65 72  l and local oper
1760: 61 74 69 6f 6e 20 6d 6f 64 65 73 2e 0a 09 7d 20  ation modes...} 
1770: 7b 0a 09 20 20 20 20 69 6d 6d 65 64 69 61 74 65  {..    immediate
1780: 0a 09 20 20 20 20 76 61 6c 69 64 61 74 65 20 62  ..    validate b
1790: 6f 6f 6c 65 61 6e 0a 09 20 20 20 20 64 65 66 61  oolean..    defa
17a0: 75 6c 74 20 6f 6e 0a 09 7d 0a 09 6f 70 74 69 6f  ult on..}..optio
17b0: 6e 20 72 65 70 6f 73 69 74 6f 72 79 20 7b 0a 09  n repository {..
17c0: 20 20 20 20 54 68 65 20 72 65 70 6f 73 69 74 6f      The reposito
17d0: 72 79 20 74 6f 20 77 6f 72 6b 20 77 69 74 68 2e  ry to work with.
17e0: 20 44 65 66 61 75 6c 74 73 20 74 6f 20 74 68 65   Defaults to the
17f0: 20 72 65 70 6f 73 69 74 6f 72 79 20 6f 66 0a 09   repository of..
1800: 20 20 20 20 74 68 65 20 63 68 65 63 6b 6f 75 74      the checkout
1810: 20 77 65 20 61 72 65 20 69 6e 2c 20 6f 72 2c 20   we are in, or, 
1820: 6f 75 74 73 69 64 65 20 6f 66 20 61 20 63 68 65  outside of a che
1830: 63 6b 6f 75 74 2c 20 74 68 65 0a 09 20 20 20 20  ckout, the..    
1840: 65 78 70 6c 69 63 69 74 6c 79 20 63 6f 6e 66 69  explicitly confi
1850: 67 75 72 65 64 20 22 64 65 66 61 75 6c 74 22 20  gured "default" 
1860: 72 65 70 6f 73 69 74 6f 72 79 2e 0a 09 7d 20 7b  repository...} {
1870: 0a 09 20 20 20 20 61 6c 69 61 73 20 52 0a 09 20  ..    alias R.. 
1880: 20 20 20 76 61 6c 69 64 61 74 65 20 72 77 66 69     validate rwfi
1890: 6c 65 0a 09 20 20 20 20 67 65 6e 65 72 61 74 65  le..    generate
18a0: 20 5b 66 78 3a 3a 63 61 6c 6c 20 66 6f 73 73 69   [fx::call fossi
18b0: 6c 20 72 65 70 6f 73 69 74 6f 72 79 2d 66 69 6e  l repository-fin
18c0: 64 5d 0a 09 7d 0a 09 73 74 61 74 65 20 72 65 70  d]..}..state rep
18d0: 6f 73 69 74 6f 72 79 2d 64 62 20 7b 0a 09 20 20  ository-db {..  
18e0: 20 20 54 68 65 20 72 65 70 6f 73 69 74 6f 72 79    The repository
18f0: 20 64 61 74 61 62 61 73 65 20 77 65 20 61 72 65   database we are
1900: 20 77 6f 72 6b 69 6e 67 20 77 69 74 68 2e 0a 09   working with...
1910: 7d 20 7b 0a 09 20 20 20 20 69 6d 6d 65 64 69 61  } {..    immedia
1920: 74 65 0a 09 20 20 20 20 23 20 45 6e 73 75 72 65  te..    # Ensure
1930: 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20 72  s that this is r
1940: 75 6e 20 62 65 66 6f 72 65 20 74 68 65 20 61 63  un before the ac
1950: 74 69 6f 6e 20 63 6f 64 65 2c 20 6d 61 6b 69 6e  tion code, makin
1960: 67 0a 09 20 20 20 20 23 20 74 68 65 20 64 61 74  g..    # the dat
1970: 61 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 67 6c  abase command gl
1980: 6f 62 61 6c 6c 79 20 61 63 63 65 73 73 69 62 6c  obally accessibl
1990: 65 2e 0a 09 20 20 20 20 67 65 6e 65 72 61 74 65  e...    generate
19a0: 20 5b 66 78 3a 3a 63 61 6c 6c 20 66 6f 73 73 69   [fx::call fossi
19b0: 6c 20 72 65 70 6f 73 69 74 6f 72 79 2d 6f 70 65  l repository-ope
19c0: 6e 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  n]..}.    }..   
19d0: 20 63 6f 6d 6d 6f 6e 20 2a 61 6c 6c 2a 20 7b 0a   common *all* {.
19e0: 09 6f 70 74 69 6f 6e 20 64 65 62 75 67 20 7b 0a  .option debug {.
19f0: 09 20 20 20 20 50 6c 61 63 65 68 6f 6c 64 65 72  .    Placeholder
1a00: 2e 20 50 72 6f 63 65 73 73 65 64 20 62 65 66 6f  . Processed befo
1a10: 72 65 20 72 65 61 63 68 69 6e 67 20 63 6d 64 72  re reaching cmdr
1a20: 2e 0a 09 7d 20 7b 0a 09 20 20 20 20 75 6e 64 6f  ...} {..    undo
1a30: 63 75 6d 65 6e 74 65 64 0a 09 20 20 20 20 76 61  cumented..    va
1a40: 6c 69 64 61 74 65 20 73 74 72 0a 09 7d 0a 09 6f  lidate str..}..o
1a50: 70 74 69 6f 6e 20 63 6f 6c 6f 72 20 7b 0a 09 20  ption color {.. 
1a60: 20 20 20 46 6f 72 63 65 20 74 68 65 20 28 6e 6f     Force the (no
1a70: 6e 2d 29 75 73 65 20 6f 66 20 63 6f 6c 6f 72 73  n-)use of colors
1a80: 20 69 6e 20 74 68 65 20 6f 75 74 70 75 74 2e 20   in the output. 
1a90: 54 68 65 20 64 65 66 61 75 6c 74 0a 09 20 20 20  The default..   
1aa0: 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20   depends on the 
1ab0: 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 20 61 63 74  environment, act
1ac0: 69 76 65 20 77 68 65 6e 20 74 61 6c 6b 69 6e 67  ive when talking
1ad0: 20 74 6f 20 61 20 74 74 79 2c 0a 09 20 20 20 20   to a tty,..    
1ae0: 61 6e 64 20 6f 74 68 65 72 77 69 73 65 20 6e 6f  and otherwise no
1af0: 74 2e 0a 09 7d 20 7b 0a 09 20 20 20 20 77 68 65  t...} {..    whe
1b00: 6e 2d 73 65 74 20 5b 6c 61 6d 62 64 61 20 7b 70  n-set [lambda {p
1b10: 20 78 7d 20 7b 0a 09 09 63 6d 64 72 20 63 6f 6c   x} {...cmdr col
1b20: 6f 72 20 61 63 74 69 76 61 74 65 20 24 78 0a 09  or activate $x..
1b30: 20 20 20 20 7d 5d 0a 09 7d 0a 20 20 20 20 7d 0a      }]..}.    }.
1b40: 0a 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 65 78 74  .    common .ext
1b50: 65 6e 64 20 7b 0a 09 23 20 55 73 65 64 20 62 79  end {..# Used by
1b60: 20 6f 66 66 69 63 65 72 20 27 6e 6f 74 65 20 63   officer 'note c
1b70: 6f 6e 66 69 67 27 2e 0a 09 6f 70 74 69 6f 6e 20  onfig'...option 
1b80: 65 78 74 65 6e 64 20 7b 0a 09 20 20 20 20 45 78  extend {..    Ex
1b90: 74 65 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74  tend the current
1ba0: 20 74 61 62 6c 65 73 2e 0a 09 7d 20 7b 20 70 72   tables...} { pr
1bb0: 65 73 65 6e 63 65 20 7d 0a 20 20 20 20 7d 0a 0a  esence }.    }..
1bc0: 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 75 75 69 64      common .uuid
1bd0: 20 7b 0a 09 69 6e 70 75 74 20 75 75 69 64 20 7b   {..input uuid {
1be0: 0a 09 20 20 20 20 46 75 6c 6c 20 66 6f 73 73 69  ..    Full fossi
1bf0: 6c 20 75 75 69 64 20 6f 66 20 74 68 65 20 61 72  l uuid of the ar
1c00: 74 69 66 61 63 74 20 74 6f 20 77 6f 72 6b 20 77  tifact to work w
1c10: 69 74 68 2e 0a 09 7d 20 7b 20 76 61 6c 69 64 61  ith...} { valida
1c20: 74 65 20 5b 66 78 3a 3a 76 74 20 75 75 69 64 5d  te [fx::vt uuid]
1c30: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63 6f   }.    }..    co
1c40: 6d 6d 6f 6e 20 2e 75 75 69 64 2d 6c 65 78 2d 6c  mmon .uuid-lex-l
1c50: 69 73 74 20 7b 0a 09 69 6e 70 75 74 20 75 75 69  ist {..input uui
1c60: 64 20 7b 0a 09 20 20 20 20 46 75 6c 6c 20 66 6f  d {..    Full fo
1c70: 73 73 69 6c 20 75 75 69 64 73 20 6f 66 20 74 68  ssil uuids of th
1c80: 65 20 61 72 74 69 66 61 63 74 73 20 74 6f 20 77  e artifacts to w
1c90: 6f 72 6b 20 77 69 74 68 2e 0a 09 7d 20 7b 0a 09  ork with...} {..
1ca0: 20 20 20 20 6c 69 73 74 0a 09 20 20 20 20 76 61      list..    va
1cb0: 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 75  lidate [fx::vt u
1cc0: 75 69 64 2d 6c 65 78 69 63 61 6c 5d 0a 09 7d 0a  uid-lexical]..}.
1cd0: 20 20 20 20 7d 0a 0a 20 20 20 20 63 6f 6d 6d 6f      }..    commo
1ce0: 6e 20 2e 61 6c 6c 20 7b 0a 09 6f 70 74 69 6f 6e  n .all {..option
1cf0: 20 61 6c 6c 20 7b 0a 09 20 20 20 20 44 6f 20 74   all {..    Do t
1d00: 68 69 73 20 66 6f 72 20 61 6c 6c 20 72 65 70 6f  his for all repo
1d10: 73 69 74 6f 72 69 65 73 20 77 61 74 63 68 65 64  sitories watched
1d20: 20 62 79 20 66 78 2e 0a 09 7d 20 7b 20 61 6c 69   by fx...} { ali
1d30: 61 73 20 41 3b 20 70 72 65 73 65 6e 63 65 20 7d  as A; presence }
1d40: 0a 09 23 20 53 65 65 20 61 6c 73 6f 20 74 68 65  ..# See also the
1d50: 20 6e 6f 74 65 20 69 6e 20 6f 70 74 69 6f 6e 20   note in option 
1d60: 72 65 70 6f 73 69 74 6f 72 79 20 61 62 6f 76 65  repository above
1d70: 2e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63 6f 6d  ..    }..    com
1d80: 6d 6f 6e 20 2e 76 65 72 62 6f 73 65 20 7b 0a 09  mon .verbose {..
1d90: 6f 70 74 69 6f 6e 20 76 65 72 62 6f 73 65 20 7b  option verbose {
1da0: 0a 09 20 20 20 20 41 63 74 69 76 61 74 65 20 6d  ..    Activate m
1db0: 6f 72 65 20 63 68 61 74 74 65 72 2e 0a 09 7d 20  ore chatter...} 
1dc0: 7b 20 61 6c 69 61 73 20 76 3b 20 70 72 65 73 65  { alias v; prese
1dd0: 6e 63 65 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  nce }.    }..   
1de0: 20 63 6f 6d 6d 6f 6e 20 2e 75 75 69 64 2d 6f 72   common .uuid-or
1df0: 2d 61 6c 6c 20 7b 0a 09 69 6e 70 75 74 20 75 75  -all {..input uu
1e00: 69 64 20 7b 0a 09 20 20 20 20 46 75 6c 6c 20 66  id {..    Full f
1e10: 6f 73 73 69 6c 20 75 75 69 64 20 6f 66 20 74 68  ossil uuid of th
1e20: 65 20 61 72 74 69 66 61 63 74 20 74 6f 20 77 6f  e artifact to wo
1e30: 72 6b 20 77 69 74 68 2e 0a 09 7d 20 7b 0a 09 20  rk with...} {.. 
1e40: 20 20 20 6f 70 74 69 6f 6e 61 6c 0a 09 20 20 20     optional..   
1e50: 20 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76   validate [fx::v
1e60: 74 20 75 75 69 64 5d 0a 09 20 20 20 20 77 68 65  t uuid]..    whe
1e70: 6e 2d 73 65 74 20 5b 66 78 3a 3a 65 78 63 6c 75  n-set [fx::exclu
1e80: 64 65 20 6f 76 65 72 61 6c 6c 5d 0a 09 7d 0a 09  de overall]..}..
1e90: 6f 70 74 69 6f 6e 20 6f 76 65 72 61 6c 6c 20 7b  option overall {
1ea0: 0a 09 20 20 20 20 44 6f 20 74 68 69 73 20 66 6f  ..    Do this fo
1eb0: 72 20 61 6c 6c 20 72 65 70 6f 73 69 74 6f 72 69  r all repositori
1ec0: 65 73 20 77 61 74 63 68 65 64 20 62 79 20 66 78  es watched by fx
1ed0: 2e 0a 09 7d 20 7b 0a 09 20 20 20 20 6c 61 62 65  ...} {..    labe
1ee0: 6c 20 61 6c 6c 0a 09 20 20 20 20 61 6c 69 61 73  l all..    alias
1ef0: 20 41 0a 09 20 20 20 20 70 72 65 73 65 6e 63 65   A..    presence
1f00: 0a 09 20 20 20 20 77 68 65 6e 2d 73 65 74 20 5b  ..    when-set [
1f10: 66 78 3a 3a 65 78 63 6c 75 64 65 20 75 75 69 64  fx::exclude uuid
1f20: 5d 0a 09 7d 0a 09 73 74 61 74 65 20 75 75 69 64  ]..}..state uuid
1f30: 2d 61 6c 6c 2d 63 68 65 63 6b 20 7b 0a 09 20 20  -all-check {..  
1f40: 20 20 43 68 65 63 6b 20 74 68 61 74 20 65 69 74    Check that eit
1f50: 68 65 72 20 75 75 69 64 20 6f 72 20 2d 2d 61 6c  her uuid or --al
1f60: 6c 20 77 65 72 65 20 75 73 65 64 2e 0a 09 20 20  l were used...  
1f70: 20 20 54 68 65 20 65 78 63 6c 75 73 69 6f 6e 20    The exclusion 
1f80: 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d 61 64  have already mad
1f90: 65 20 73 75 72 65 20 74 68 61 74 20 6e 6f 74 20  e sure that not 
1fa0: 62 6f 74 68 20 61 72 65 20 73 65 74 2e 0a 09 7d  both are set...}
1fb0: 20 7b 0a 09 20 20 20 20 69 6d 6d 65 64 69 61 74   {..    immediat
1fc0: 65 0a 09 20 20 20 20 77 68 65 6e 2d 63 6f 6d 70  e..    when-comp
1fd0: 6c 65 74 65 20 5b 6c 61 6d 62 64 61 20 7b 70 20  lete [lambda {p 
1fe0: 78 7d 20 7b 0a 09 09 69 66 20 7b 5b 24 70 20 63  x} {...if {[$p c
1ff0: 6f 6e 66 69 67 20 40 75 75 69 64 20 20 20 20 73  onfig @uuid    s
2000: 65 74 3f 5d 20 7c 7c 0a 09 09 20 20 20 20 5b 24  et?] ||...    [$
2010: 70 20 63 6f 6e 66 69 67 20 40 6f 76 65 72 61 6c  p config @overal
2020: 6c 20 73 65 74 3f 5d 7d 20 72 65 74 75 72 6e 0a  l set?]} return.
2030: 09 09 72 65 74 75 72 6e 20 2d 63 6f 64 65 20 65  ..return -code e
2040: 72 72 6f 72 20 2d 65 72 72 6f 72 63 6f 64 65 20  rror -errorcode 
2050: 7b 43 4d 44 52 20 56 41 4c 49 44 41 54 45 7d 20  {CMDR VALIDATE} 
2060: 5c 0a 09 09 20 20 20 20 22 4d 75 73 74 20 75 73  \...    "Must us
2070: 65 20 65 69 74 68 65 72 20 75 75 69 64 20 6f 72  e either uuid or
2080: 20 2d 2d 61 6c 6c 22 20 0a 09 20 20 20 20 7d 5d   --all" ..    }]
2090: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63  ..}.    }..    c
20a0: 6f 6d 6d 6f 6e 20 2e 65 78 70 6f 72 74 20 7b 0a  ommon .export {.
20b0: 09 69 6e 70 75 74 20 6f 75 74 70 75 74 20 7b 0a  .input output {.
20c0: 09 20 20 20 20 54 68 65 20 70 61 74 68 20 6f 66  .    The path of
20d0: 20 74 68 65 20 66 69 6c 65 20 74 6f 20 73 61 76   the file to sav
20e0: 65 20 74 68 65 20 65 78 70 6f 72 74 65 64 20 64  e the exported d
20f0: 61 74 61 20 69 6e 74 6f 2e 0a 09 7d 20 7b 0a 09  ata into...} {..
2100: 20 20 20 20 23 20 41 76 6f 69 64 20 77 63 68 61      # Avoid wcha
2110: 6e 2e 20 45 78 74 65 72 6e 61 6c 6c 79 20 76 69  n. Externally vi
2120: 73 69 62 6c 65 20 73 69 64 65 2d 65 66 66 65 63  sible side-effec
2130: 74 20 69 73 20 62 61 64 2c 20 63 61 6e 0a 09 20  t is bad, can.. 
2140: 20 20 20 23 20 68 61 70 70 65 6e 20 77 68 65 6e     # happen when
2150: 20 63 6d 64 72 20 73 69 6d 70 6c 79 20 77 61 6e   cmdr simply wan
2160: 74 73 20 74 6f 20 74 65 73 74 20 74 68 65 20 6f  ts to test the o
2170: 6b 2d 6e 65 73 73 20 6f 66 20 74 68 65 0a 09 20  k-ness of the.. 
2180: 20 20 20 23 20 69 6e 70 75 74 20 77 69 74 68 6f     # input witho
2190: 75 74 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ut any conversio
21a0: 6e 2e 0a 09 20 20 20 20 76 61 6c 69 64 61 74 65  n...    validate
21b0: 20 77 66 69 6c 65 0a 09 7d 0a 20 20 20 20 7d 0a   wfile..}.    }.
21c0: 0a 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 69 6d 70  .    common .imp
21d0: 6f 72 74 20 7b 0a 09 69 6e 70 75 74 20 69 6e 70  ort {..input inp
21e0: 75 74 20 7b 0a 09 20 20 20 20 54 68 65 20 70 61  ut {..    The pa
21f0: 74 68 20 6f 66 20 74 68 65 20 66 69 6c 65 20 74  th of the file t
2200: 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 20  o read the data 
2210: 66 72 6f 6d 2e 0a 09 20 20 20 20 44 65 66 61 75  from...    Defau
2220: 6c 74 73 20 74 6f 20 73 74 64 69 6e 2e 0a 09 7d  lts to stdin...}
2230: 20 7b 0a 09 20 20 20 20 6f 70 74 69 6f 6e 61 6c   {..    optional
2240: 0a 09 20 20 20 20 76 61 6c 69 64 61 74 65 20 72  ..    validate r
2250: 63 68 61 6e 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20  chan..}.    }.. 
2260: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
2270: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
2280: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
2290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a0: 23 0a 0a 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 65  #..    common .e
22b0: 76 65 6e 74 2d 68 69 64 64 65 6e 2d 76 61 6c 69  vent-hidden-vali
22c0: 64 61 74 69 6f 6e 20 7b 0a 09 73 74 61 74 65 20  dation {..state 
22d0: 65 76 65 6e 74 20 7b 0a 09 20 20 20 20 48 69 64  event {..    Hid
22e0: 64 65 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  den parameter to
22f0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
2300: 69 6e 74 65 72 6e 61 6c 20 76 61 6c 69 64 61 74  internal validat
2310: 69 6f 6e 20 6f 66 0a 09 20 20 20 20 65 76 65 6e  ion of..    even
2320: 74 2d 74 79 70 65 73 2e 0a 09 7d 20 7b 0a 09 20  t-types...} {.. 
2330: 20 20 20 6c 61 62 65 6c 20 69 6d 70 6f 72 74 65     label importe
2340: 64 2d 65 76 65 6e 74 0a 09 20 20 20 20 76 61 6c  d-event..    val
2350: 69 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 65 76  idate [fx::vt ev
2360: 65 6e 74 2d 74 79 70 65 5d 0a 09 7d 0a 20 20 20  ent-type]..}.   
2370: 20 7d 0a 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 66   }.    common .f
2380: 69 65 6c 64 2d 68 69 64 64 65 6e 2d 76 61 6c 69  ield-hidden-vali
2390: 64 61 74 69 6f 6e 20 7b 0a 09 73 74 61 74 65 20  dation {..state 
23a0: 66 69 65 6c 64 20 7b 0a 09 20 20 20 20 48 69 64  field {..    Hid
23b0: 64 65 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  den parameter to
23c0: 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20   be used by the 
23d0: 69 6e 74 65 72 6e 61 6c 20 76 61 6c 69 64 61 74  internal validat
23e0: 69 6f 6e 20 6f 66 0a 09 20 20 20 20 74 69 63 6b  ion of..    tick
23f0: 65 74 20 66 69 65 6c 64 73 2e 0a 09 7d 20 7b 0a  et fields...} {.
2400: 09 20 20 20 20 6c 61 62 65 6c 20 69 6d 70 6f 72  .    label impor
2410: 74 65 64 2d 74 69 63 6b 65 74 2d 66 69 65 6c 64  ted-ticket-field
2420: 0a 09 20 20 20 20 76 61 6c 69 64 61 74 65 20 5b  ..    validate [
2430: 66 78 3a 3a 76 74 20 74 69 63 6b 65 74 2d 66 69  fx::vt ticket-fi
2440: 65 6c 64 5d 0a 09 7d 0a 20 20 20 20 7d 0a 20 20  eld]..}.    }.  
2450: 20 20 63 6f 6d 6d 6f 6e 20 2e 6d 61 69 6c 63 6f    common .mailco
2460: 6e 66 69 67 2d 68 69 64 64 65 6e 2d 76 61 6c 69  nfig-hidden-vali
2470: 64 61 74 69 6f 6e 20 7b 0a 09 73 74 61 74 65 20  dation {..state 
2480: 6d 61 69 6c 63 6f 6e 66 69 67 20 7b 0a 09 20 20  mailconfig {..  
2490: 20 20 48 69 64 64 65 6e 20 70 61 72 61 6d 65 74    Hidden paramet
24a0: 65 72 20 74 6f 20 62 65 20 75 73 65 64 20 62 79  er to be used by
24b0: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 76 61   the internal va
24c0: 6c 69 64 61 74 69 6f 6e 20 6f 66 0a 09 20 20 20  lidation of..   
24d0: 20 6d 61 69 6c 20 63 6f 6e 66 69 67 75 72 61 74   mail configurat
24e0: 69 6f 6e 20 6b 65 79 73 0a 09 7d 20 7b 0a 09 20  ion keys..} {.. 
24f0: 20 20 20 6c 61 62 65 6c 20 69 6d 70 6f 72 74 65     label importe
2500: 64 2d 6d 61 69 6c 2d 63 6f 6e 66 69 67 2d 6b 65  d-mail-config-ke
2510: 79 0a 09 20 20 20 20 76 61 6c 69 64 61 74 65 20  y..    validate 
2520: 5b 66 78 3a 3a 76 74 20 6d 61 69 6c 2d 63 6f 6e  [fx::vt mail-con
2530: 66 69 67 5d 0a 09 7d 0a 20 20 20 20 7d 0a 20 20  fig]..}.    }.  
2540: 20 20 63 6f 6d 6d 6f 6e 20 2e 6d 61 69 6c 61 64    common .mailad
2550: 64 72 2d 68 69 64 64 65 6e 2d 76 61 6c 69 64 61  dr-hidden-valida
2560: 74 69 6f 6e 20 7b 0a 09 73 74 61 74 65 20 6d 61  tion {..state ma
2570: 69 6c 61 64 64 72 20 7b 0a 09 20 20 20 20 48 69  iladdr {..    Hi
2580: 64 64 65 6e 20 70 61 72 61 6d 65 74 65 72 20 74  dden parameter t
2590: 6f 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  o be used by the
25a0: 20 69 6e 74 65 72 6e 61 6c 20 76 61 6c 69 64 61   internal valida
25b0: 74 69 6f 6e 20 6f 66 0a 09 20 20 20 20 65 6d 61  tion of..    ema
25c0: 69 6c 20 61 64 64 72 65 73 73 65 73 2e 0a 09 7d  il addresses...}
25d0: 20 7b 0a 09 20 20 20 20 6c 61 62 65 6c 20 69 6d   {..    label im
25e0: 70 6f 72 74 65 64 2d 6d 61 69 6c 2d 61 64 64 72  ported-mail-addr
25f0: 65 73 73 0a 09 20 20 20 20 76 61 6c 69 64 61 74  ess..    validat
2600: 65 20 5b 66 78 3a 3a 76 74 20 6d 61 69 6c 2d 61  e [fx::vt mail-a
2610: 64 64 72 65 73 73 5d 0a 09 7d 0a 20 20 20 20 7d  ddress]..}.    }
2620: 0a 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 63 6f 6e  .    common .con
2630: 66 69 67 61 72 65 61 2d 68 69 64 64 65 6e 2d 76  figarea-hidden-v
2640: 61 6c 69 64 61 74 69 6f 6e 20 7b 0a 09 73 74 61  alidation {..sta
2650: 74 65 20 63 6f 6e 66 69 67 61 72 65 61 20 7b 0a  te configarea {.
2660: 09 20 20 20 20 48 69 64 64 65 6e 20 70 61 72 61  .    Hidden para
2670: 6d 65 74 65 72 20 74 6f 20 62 65 20 75 73 65 64  meter to be used
2680: 20 62 79 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   by the internal
2690: 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 66 0a 09   validation of..
26a0: 20 20 20 20 63 6f 6e 66 69 67 20 61 72 65 61 20      config area 
26b0: 6e 61 6d 65 73 2e 0a 09 7d 20 7b 0a 09 20 20 20  names...} {..   
26c0: 20 6c 61 62 65 6c 20 69 6d 70 6f 72 74 65 64 2d   label imported-
26d0: 63 6f 6e 66 69 67 61 72 65 61 0a 09 20 20 20 20  configarea..    
26e0: 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74  validate [fx::vt
26f0: 20 63 6f 6e 66 69 67 2d 61 72 65 61 5d 0a 09 7d   config-area]..}
2700: 0a 20 20 20 20 7d 0a 20 20 20 20 63 6f 6d 6d 6f  .    }.    commo
2710: 6e 20 2e 73 79 6e 63 64 69 72 2d 68 69 64 64 65  n .syncdir-hidde
2720: 6e 2d 76 61 6c 69 64 61 74 69 6f 6e 20 7b 0a 09  n-validation {..
2730: 73 74 61 74 65 20 73 79 6e 63 64 69 72 20 7b 0a  state syncdir {.
2740: 09 20 20 20 20 48 69 64 64 65 6e 20 70 61 72 61  .    Hidden para
2750: 6d 65 74 65 72 20 74 6f 20 62 65 20 75 73 65 64  meter to be used
2760: 20 62 79 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   by the internal
2770: 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 66 0a 09   validation of..
2780: 20 20 20 20 73 79 6e 63 20 64 69 72 65 63 74 69      sync directi
2790: 6f 6e 73 2e 0a 09 7d 20 7b 0a 09 20 20 20 20 6c  ons...} {..    l
27a0: 61 62 65 6c 20 69 6d 70 6f 72 74 65 64 2d 73 79  abel imported-sy
27b0: 6e 63 64 69 72 0a 09 20 20 20 20 76 61 6c 69 64  ncdir..    valid
27c0: 61 74 65 20 5b 66 78 3a 3a 76 74 20 73 79 6e 63  ate [fx::vt sync
27d0: 2d 64 69 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 20  -dir]..}.    }. 
27e0: 20 20 20 63 6f 6d 6d 6f 6e 20 2e 72 6f 75 74 65     common .route
27f0: 6d 61 70 20 7b 0a 09 23 20 41 6c 6c 20 76 61 6c  map {..# All val
2800: 69 64 61 74 69 6f 6e 20 66 69 65 6c 64 73 20 75  idation fields u
2810: 73 65 64 20 62 79 20 74 68 65 20 52 6f 75 74 65  sed by the Route
2820: 4d 61 70 20 63 6f 64 65 2e 0a 09 75 73 65 20 2e  Map code...use .
2830: 66 69 65 6c 64 2d 68 69 64 64 65 6e 2d 76 61 6c  field-hidden-val
2840: 69 64 61 74 69 6f 6e 0a 09 75 73 65 20 2e 65 76  idation..use .ev
2850: 65 6e 74 2d 68 69 64 64 65 6e 2d 76 61 6c 69 64  ent-hidden-valid
2860: 61 74 69 6f 6e 0a 09 75 73 65 20 2e 6d 61 69 6c  ation..use .mail
2870: 61 64 64 72 2d 68 69 64 64 65 6e 2d 76 61 6c 69  addr-hidden-vali
2880: 64 61 74 69 6f 6e 0a 20 20 20 20 7d 0a 20 20 20  dation.    }.   
2890: 20 63 6f 6d 6d 6f 6e 20 2e 70 65 65 72 6d 61 70   common .peermap
28a0: 20 7b 0a 09 23 20 41 6c 6c 20 76 61 6c 69 64 61   {..# All valida
28b0: 74 69 6f 6e 20 66 69 65 6c 64 73 20 75 73 65 64  tion fields used
28c0: 20 62 79 20 74 68 65 20 70 65 65 72 69 6e 67 20   by the peering 
28d0: 63 6f 64 65 2e 0a 09 75 73 65 20 2e 63 6f 6e 66  code...use .conf
28e0: 69 67 61 72 65 61 2d 68 69 64 64 65 6e 2d 76 61  igarea-hidden-va
28f0: 6c 69 64 61 74 69 6f 6e 0a 09 75 73 65 20 2e 73  lidation..use .s
2900: 79 6e 63 64 69 72 2d 68 69 64 64 65 6e 2d 76 61  yncdir-hidden-va
2910: 6c 69 64 61 74 69 6f 6e 0a 20 20 20 20 7d 0a 0a  lidation.    }..
2920: 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 67 6c 6f 62      common .glob
2930: 61 6c 20 7b 0a 09 6f 70 74 69 6f 6e 20 67 6c 6f  al {..option glo
2940: 62 61 6c 20 7b 0a 09 20 20 20 20 4f 70 65 72 61  bal {..    Opera
2950: 74 65 20 6f 6e 20 74 68 65 20 67 6c 6f 62 61 6c  te on the global
2960: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 0a   configuration..
2970: 09 7d 20 7b 0a 09 20 20 20 20 61 6c 69 61 73 20  .} {..    alias 
2980: 47 20 3b 20 70 72 65 73 65 6e 63 65 0a 09 20 20  G ; presence..  
2990: 20 20 77 68 65 6e 2d 73 65 74 20 5b 3a 3a 66 78    when-set [::fx
29a0: 3a 3a 6e 6f 2d 73 65 61 72 63 68 5d 0a 09 7d 0a  ::no-search]..}.
29b0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
29c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
29d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
29e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
29f0: 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20 70  #########..    p
2a00: 72 69 76 61 74 65 20 76 65 72 73 69 6f 6e 20 7b  rivate version {
2a10: 0a 09 73 65 63 74 69 6f 6e 20 49 6e 74 72 6f 73  ..section Intros
2a20: 70 65 63 74 69 6f 6e 0a 09 64 65 73 63 72 69 70  pection..descrip
2a30: 74 69 6f 6e 20 7b 0a 09 20 20 20 20 50 72 69 6e  tion {..    Prin
2a40: 74 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 72 65  t version and re
2a50: 76 69 73 69 6f 6e 20 6f 66 20 74 68 65 20 61 70  vision of the ap
2a60: 70 6c 69 63 61 74 69 6f 6e 2e 0a 09 7d 0a 20 20  plication...}.  
2a70: 20 20 7d 20 5b 6c 61 6d 62 64 61 20 63 6f 6e 66    } [lambda conf
2a80: 69 67 20 7b 0a 09 70 75 74 73 20 22 5b 66 69 6c  ig {..puts "[fil
2a90: 65 20 74 61 69 6c 20 24 3a 3a 61 72 67 76 30 5d  e tail $::argv0]
2aa0: 20 5b 70 61 63 6b 61 67 65 20 70 72 65 73 65 6e   [package presen
2ab0: 74 20 66 78 5d 22 0a 20 20 20 20 7d 5d 0a 0a 20  t fx]".    }].. 
2ac0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 74 61     private conta
2ad0: 63 74 73 20 7b 0a 09 64 65 73 63 72 69 70 74 69  cts {..descripti
2ae0: 6f 6e 20 7b 0a 09 20 20 20 20 50 72 69 6e 74 20  on {..    Print 
2af0: 61 6c 6c 20 65 6d 61 69 6c 20 61 64 64 72 65 73  all email addres
2b00: 73 65 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ses found in the
2b10: 20 72 65 70 6f 73 69 74 6f 72 79 20 28 54 69 63   repository (Tic
2b20: 6b 65 74 73 29 2e 0a 09 7d 0a 09 75 73 65 20 2e  kets)...}..use .
2b30: 72 65 70 6f 73 69 74 6f 72 79 0a 20 20 20 20 7d  repository.    }
2b40: 20 5b 66 78 3a 3a 63 61 6c 6c 20 63 6f 6e 74 61   [fx::call conta
2b50: 63 74 73 20 67 65 74 5d 0a 0a 20 20 20 20 70 72  cts get]..    pr
2b60: 69 76 61 74 65 20 73 61 76 65 20 7b 0a 09 64 65  ivate save {..de
2b70: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 20 20 20  scription {..   
2b80: 20 53 61 76 65 20 61 6c 6c 20 66 78 2d 6d 61 6e   Save all fx-man
2b90: 61 67 65 64 20 73 74 61 74 65 20 6f 66 20 74 68  aged state of th
2ba0: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 0a 09 7d  e repository...}
2bb0: 0a 09 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72  ..use .repositor
2bc0: 79 0a 09 75 73 65 20 2e 65 78 70 6f 72 74 0a 20  y..use .export. 
2bd0: 20 20 20 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 73     } [fx::call s
2be0: 74 61 74 65 20 73 61 76 65 5d 0a 0a 20 20 20 20  tate save]..    
2bf0: 70 72 69 76 61 74 65 20 72 65 73 74 6f 72 65 20  private restore 
2c00: 7b 0a 09 64 65 73 63 72 69 70 74 69 6f 6e 20 7b  {..description {
2c10: 0a 09 20 20 20 20 4c 6f 61 64 20 61 6c 6c 20 66  ..    Load all f
2c20: 78 2d 6d 61 6e 61 67 65 64 20 73 74 61 74 65 20  x-managed state 
2c30: 6f 66 20 61 20 72 65 70 6f 73 69 74 6f 72 79 2e  of a repository.
2c40: 0a 09 7d 0a 09 75 73 65 20 2e 72 65 70 6f 73 69  ..}..use .reposi
2c50: 74 6f 72 79 0a 09 75 73 65 20 2e 69 6d 70 6f 72  tory..use .impor
2c60: 74 0a 20 20 20 20 7d 20 5b 66 78 3a 3a 63 61 6c  t.    } [fx::cal
2c70: 6c 20 73 74 61 74 65 20 72 65 73 74 6f 72 65 5d  l state restore]
2c80: 0a 0a 20 20 20 20 6f 66 66 69 63 65 72 20 72 65  ..    officer re
2c90: 70 6f 73 69 74 6f 72 79 20 7b 0a 09 64 65 73 63  pository {..desc
2ca0: 72 69 70 74 69 6f 6e 20 7b 0a 09 20 20 20 20 4d  ription {..    M
2cb0: 61 6e 61 67 65 20 74 68 65 20 72 65 70 6f 73 69  anage the reposi
2cc0: 74 6f 72 79 20 74 6f 20 77 6f 72 6b 20 77 69 74  tory to work wit
2cd0: 68 2e 0a 09 7d 0a 0a 09 70 72 69 76 61 74 65 20  h...}...private 
2ce0: 73 68 6f 77 20 7b 0a 09 20 20 20 20 73 65 63 74  show {..    sect
2cf0: 69 6f 6e 20 49 6e 74 72 6f 73 70 65 63 74 69 6f  ion Introspectio
2d00: 6e 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 7b  n..    section {
2d10: 52 65 70 6f 73 69 74 6f 72 79 20 4d 61 6e 61 67  Repository Manag
2d20: 65 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65 73 63  ement}..    desc
2d30: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 50 72 69 6e  ription {...Prin
2d40: 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  t the name of th
2d50: 65 20 72 65 70 6f 73 69 74 6f 72 79 20 77 65 20  e repository we 
2d60: 61 72 65 20 77 6f 72 6b 69 6e 67 20 6f 6e 2c 20  are working on, 
2d70: 69 66 20 61 6e 79 2e 0a 09 20 20 20 20 7d 0a 09  if any...    }..
2d80: 20 20 20 20 75 73 65 20 2e 72 65 70 6f 73 69 74      use .reposit
2d90: 6f 72 79 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c  ory..} [fx::call
2da0: 20 66 6f 73 73 69 6c 20 63 5f 73 68 6f 77 5f 72   fossil c_show_r
2db0: 65 70 6f 73 69 74 6f 72 79 5d 0a 09 64 65 66 61  epository]..defa
2dc0: 75 6c 74 0a 0a 09 70 72 69 76 61 74 65 20 64 65  ult...private de
2dd0: 66 61 75 6c 74 20 7b 0a 09 20 20 20 20 73 65 63  fault {..    sec
2de0: 74 69 6f 6e 20 49 6e 74 72 6f 73 70 65 63 74 69  tion Introspecti
2df0: 6f 6e 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20  on..    section 
2e00: 7b 52 65 70 6f 73 69 74 6f 72 79 20 4d 61 6e 61  {Repository Mana
2e10: 67 65 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65 73  gement}..    des
2e20: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 50 72 69  cription {...Pri
2e30: 6e 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nt the name of t
2e40: 68 65 20 64 65 66 61 75 6c 74 20 72 65 70 6f 73  he default repos
2e50: 69 74 6f 72 79 2c 20 69 66 20 61 6e 79 2e 0a 09  itory, if any...
2e60: 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63 61      }..} [fx::ca
2e70: 6c 6c 20 66 6f 73 73 69 6c 20 63 5f 64 65 66 61  ll fossil c_defa
2e80: 75 6c 74 5f 72 65 70 6f 73 69 74 6f 72 79 5d 0a  ult_repository].
2e90: 0a 09 70 72 69 76 61 74 65 20 72 65 73 65 74 20  ..private reset 
2ea0: 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 7b  {..    section {
2eb0: 52 65 70 6f 73 69 74 6f 72 79 20 4d 61 6e 61 67  Repository Manag
2ec0: 65 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65 73 63  ement}..    desc
2ed0: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 55 6e 73 65  ription {...Unse
2ee0: 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 65  t the current de
2ef0: 66 61 75 6c 74 20 72 65 70 6f 73 69 74 6f 72 79  fault repository
2f00: 2e 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a  ...    }..} [fx:
2f10: 3a 63 61 6c 6c 20 66 6f 73 73 69 6c 20 63 5f 72  :call fossil c_r
2f20: 65 73 65 74 5f 72 65 70 6f 73 69 74 6f 72 79 5d  eset_repository]
2f30: 0a 0a 09 70 72 69 76 61 74 65 20 73 65 74 20 7b  ...private set {
2f40: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 7b 52  ..    section {R
2f50: 65 70 6f 73 69 74 6f 72 79 20 4d 61 6e 61 67 65  epository Manage
2f60: 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65 73 63 72  ment}..    descr
2f70: 69 70 74 69 6f 6e 20 7b 0a 09 09 53 65 74 20 74  iption {...Set t
2f80: 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 63  he path to the c
2f90: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 72  urrent default r
2fa0: 65 70 6f 73 69 74 6f 72 79 2e 0a 09 20 20 20 20  epository...    
2fb0: 7d 0a 09 20 20 20 20 69 6e 70 75 74 20 74 61 72  }..    input tar
2fc0: 67 65 74 20 7b 0a 09 09 54 68 65 20 70 61 74 68  get {...The path
2fd0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
2fe0: 72 65 70 6f 73 69 74 6f 72 79 20 74 6f 20 75 73  repository to us
2ff0: 65 20 77 68 65 6e 20 61 6c 6c 20 65 6c 73 65 20  e when all else 
3000: 66 61 69 6c 73 2e 0a 09 20 20 20 20 7d 20 7b 0a  fails...    } {.
3010: 09 09 76 61 6c 69 64 61 74 65 20 72 77 70 61 74  ..validate rwpat
3020: 68 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a  h..    }..} [fx:
3030: 3a 63 61 6c 6c 20 66 6f 73 73 69 6c 20 63 5f 73  :call fossil c_s
3040: 65 74 5f 72 65 70 6f 73 69 74 6f 72 79 5d 0a 20  et_repository]. 
3050: 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23     }..    # # ##
3060: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
3070: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
3080: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
3090: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
30a0: 4f 76 65 72 6c 61 79 20 74 6f 20 74 68 65 20 73  Overlay to the s
30b0: 74 61 6e 64 61 72 64 20 22 66 6f 73 73 69 6c 20  tandard "fossil 
30c0: 75 73 65 72 22 20 63 6f 6d 6d 61 6e 64 0a 0a 20  user" command.. 
30d0: 20 20 20 6f 66 66 69 63 65 72 20 75 73 65 72 20     officer user 
30e0: 7b 0a 09 64 65 73 63 72 69 70 74 69 6f 6e 20 7b  {..description {
30f0: 0a 09 20 20 20 20 4d 61 6e 61 67 65 6d 65 6e 74  ..    Management
3100: 20 6f 66 20 75 73 65 72 73 20 69 6e 20 74 68 65   of users in the
3110: 20 6c 6f 63 61 6c 20 72 65 70 6f 73 69 74 6f 72   local repositor
3120: 79 0a 09 7d 0a 0a 09 70 72 69 76 61 74 65 20 70  y..}...private p
3130: 75 73 68 20 7b 0a 09 20 20 20 20 73 65 63 74 69  ush {..    secti
3140: 6f 6e 20 7b 55 73 65 72 20 4d 61 6e 61 67 65 6d  on {User Managem
3150: 65 6e 74 7d 0a 09 20 20 20 20 64 65 73 63 72 69  ent}..    descri
3160: 70 74 69 6f 6e 20 7b 0a 09 09 50 75 73 68 20 6c  ption {...Push l
3170: 6f 63 61 6c 20 63 68 61 6e 67 65 73 20 74 6f 20  ocal changes to 
3180: 74 68 65 20 75 73 65 72 73 20 74 6f 20 74 68 65  the users to the
3190: 0a 09 09 63 6f 6e 66 69 67 75 72 65 64 20 72 65  ...configured re
31a0: 6d 6f 74 65 0a 09 20 20 20 20 7d 0a 09 20 20 20  mote..    }..   
31b0: 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79   use .repository
31c0: 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 75 73  ..} [fx::call us
31d0: 65 72 20 70 75 73 68 5d 0a 0a 09 70 72 69 76 61  er push]...priva
31e0: 74 65 20 70 75 6c 6c 20 7b 0a 09 20 20 20 20 73  te pull {..    s
31f0: 65 63 74 69 6f 6e 20 7b 55 73 65 72 20 4d 61 6e  ection {User Man
3200: 61 67 65 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65  agement}..    de
3210: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 50 75  scription {...Pu
3220: 73 68 20 75 73 65 72 20 69 6e 66 6f 72 6d 61 74  sh user informat
3230: 69 6f 6e 20 66 72 6f 6d 20 74 68 65 0a 09 09 63  ion from the...c
3240: 6f 6e 66 69 67 75 72 65 64 20 72 65 6d 6f 74 65  onfigured remote
3250: 20 74 6f 20 68 65 72 65 2e 0a 09 20 20 20 20 7d   to here...    }
3260: 0a 09 20 20 20 20 75 73 65 20 2e 72 65 70 6f 73  ..    use .repos
3270: 69 74 6f 72 79 0a 09 7d 20 5b 66 78 3a 3a 63 61  itory..} [fx::ca
3280: 6c 6c 20 75 73 65 72 20 70 75 6c 6c 5d 0a 0a 09  ll user pull]...
3290: 70 72 69 76 61 74 65 20 73 79 6e 63 20 7b 0a 09  private sync {..
32a0: 20 20 20 20 73 65 63 74 69 6f 6e 20 7b 55 73 65      section {Use
32b0: 72 20 4d 61 6e 61 67 65 6d 65 6e 74 7d 0a 09 20  r Management}.. 
32c0: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
32d0: 0a 09 09 53 79 6e 63 20 74 68 65 20 75 73 65 72  ...Sync the user
32e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 74 20   information at 
32f0: 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 0a 09  the configured..
3300: 09 72 65 6d 6f 74 65 20 61 6e 64 20 68 65 72 65  .remote and here
3310: 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73  ...    }..    us
3320: 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09 7d  e .repository..}
3330: 20 5b 66 78 3a 3a 63 61 6c 6c 20 75 73 65 72 20   [fx::call user 
3340: 73 79 6e 63 5d 0a 0a 09 70 72 69 76 61 74 65 20  sync]...private 
3350: 6c 69 73 74 20 7b 0a 09 20 20 20 20 73 65 63 74  list {..    sect
3360: 69 6f 6e 20 7b 55 73 65 72 20 4d 61 6e 61 67 65  ion {User Manage
3370: 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65 73 63 72  ment}..    descr
3380: 69 70 74 69 6f 6e 20 7b 0a 09 09 53 68 6f 77 20  iption {...Show 
3390: 61 6c 6c 20 6b 6e 6f 77 6e 20 75 73 65 72 73 2c  all known users,
33a0: 20 74 68 65 69 72 20 69 6e 66 6f 72 6d 61 74 69   their informati
33b0: 6f 6e 20 61 6e 64 20 63 61 70 61 62 69 6c 69 74  on and capabilit
33c0: 69 65 73 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  ies..    }..    
33d0: 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a  use .repository.
33e0: 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 75 73 65  .} [fx::call use
33f0: 72 20 6c 69 73 74 5d 0a 09 64 65 66 61 75 6c 74  r list]..default
3400: 0a 0a 09 70 72 69 76 61 74 65 20 62 72 6f 61 64  ...private broad
3410: 63 61 73 74 20 7b 0a 09 20 20 20 20 73 65 63 74  cast {..    sect
3420: 69 6f 6e 20 7b 55 73 65 72 20 4d 61 6e 61 67 65  ion {User Manage
3430: 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65 73 63 72  ment}..    descr
3440: 69 70 74 69 6f 6e 20 7b 0a 09 09 53 65 6e 64 20  iption {...Send 
3450: 61 20 6d 61 69 6c 20 74 6f 20 61 6c 6c 20 61 63  a mail to all ac
3460: 63 6f 75 6e 74 73 20 6f 66 20 74 68 65 20 72 65  counts of the re
3470: 70 6f 73 69 74 6f 72 79 2e 0a 09 20 20 20 20 7d  pository...    }
3480: 0a 09 20 20 20 20 69 6e 70 75 74 20 74 65 78 74  ..    input text
3490: 20 7b 0a 09 09 54 68 65 20 66 69 6c 65 20 63 6f   {...The file co
34a0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 63 6f 6e  ntaining the con
34b0: 74 65 6e 74 73 20 6f 66 20 74 68 65 20 6d 61 69  tents of the mai
34c0: 6c 2e 0a 09 09 44 65 66 61 75 6c 74 73 20 74 6f  l....Defaults to
34d0: 20 73 74 64 69 6e 0a 09 20 20 20 20 7d 20 7b 0a   stdin..    } {.
34e0: 09 09 6f 70 74 69 6f 6e 61 6c 0a 09 09 76 61 6c  ..optional...val
34f0: 69 64 61 74 65 20 72 63 68 61 6e 0a 09 20 20 20  idate rchan..   
3500: 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 72 65 70   }..    use .rep
3510: 6f 73 69 74 6f 72 79 0a 09 7d 20 5b 66 78 3a 3a  ository..} [fx::
3520: 63 61 6c 6c 20 75 73 65 72 20 62 72 6f 61 64 63  call user broadc
3530: 61 73 74 5d 0a 0a 09 70 72 69 76 61 74 65 20 63  ast]...private c
3540: 6f 6e 74 61 63 74 20 7b 0a 09 20 20 20 20 73 65  ontact {..    se
3550: 63 74 69 6f 6e 20 7b 55 73 65 72 20 4d 61 6e 61  ction {User Mana
3560: 67 65 6d 65 6e 74 7d 0a 09 20 20 20 20 64 65 73  gement}..    des
3570: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 43 68 61  cription {...Cha
3580: 6e 67 65 20 74 68 65 20 63 6f 6e 74 61 63 74 20  nge the contact 
3590: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
35a0: 74 68 65 20 6e 61 6d 65 64 20 75 73 65 72 0a 09  the named user..
35b0: 20 20 20 20 7d 0a 09 20 20 20 20 69 6e 70 75 74      }..    input
35c0: 20 75 73 65 72 20 7b 0a 09 09 54 68 65 20 6e 61   user {...The na
35d0: 6d 65 20 6f 66 20 74 68 65 20 75 73 65 72 20 74  me of the user t
35e0: 6f 20 75 70 64 61 74 65 2e 0a 09 20 20 20 20 7d  o update...    }
35f0: 20 7b 0a 09 09 76 61 6c 69 64 61 74 65 20 5b 66   {...validate [f
3600: 78 3a 3a 76 74 20 75 73 65 72 5d 0a 09 09 23 20  x::vt user]...# 
3610: 6e 65 65 64 20 65 78 74 65 6e 64 65 64 20 69 6e  need extended in
3620: 74 65 72 61 63 74 69 6f 6e 20 6f 70 73 20 3d 3e  teraction ops =>
3630: 20 70 61 72 74 20 6f 66 20 63 6d 64 72 20 3f 0a   part of cmdr ?.
3640: 09 09 23 67 65 6e 65 72 61 74 65 20 5b 66 78 3a  ..#generate [fx:
3650: 3a 63 61 6c 6c 20 75 73 65 72 20 73 65 6c 65 63  :call user selec
3660: 74 2d 66 6f 72 20 7b 63 6f 6e 74 61 63 74 20 63  t-for {contact c
3670: 68 61 6e 67 65 7d 5d 0a 09 20 20 20 20 7d 0a 09  hange}]..    }..
3680: 20 20 20 20 69 6e 70 75 74 20 63 6f 6e 74 61 63      input contac
3690: 74 20 7b 0a 09 09 54 68 65 20 6e 65 77 20 63 6f  t {...The new co
36a0: 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntact informatio
36b0: 6e 20 6f 66 20 74 68 65 20 75 73 65 72 2e 0a 09  n of the user...
36c0: 09 57 69 6c 6c 20 62 65 20 61 73 6b 65 64 20 66  .Will be asked f
36d0: 6f 72 20 69 6e 74 65 72 61 63 74 69 76 65 6c 79  or interactively
36e0: 20 69 66 20 6e 6f 74 20 73 70 65 63 69 66 69 65   if not specifie
36f0: 64 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09 6f 70  d...    } {...op
3700: 74 69 6f 6e 61 6c 0a 09 09 76 61 6c 69 64 61 74  tional...validat
3710: 65 20 73 74 72 0a 09 09 69 6e 74 65 72 61 63 74  e str...interact
3720: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65  ..    }..    use
3730: 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09 7d 20   .repository..} 
3740: 5b 66 78 3a 3a 63 61 6c 6c 20 75 73 65 72 20 75  [fx::call user u
3750: 70 64 61 74 65 2d 63 6f 6e 74 61 63 74 5d 0a 20  pdate-contact]. 
3760: 20 20 20 7d 0a 20 20 20 20 61 6c 69 61 73 20 75     }.    alias u
3770: 73 65 72 73 20 3d 20 75 73 65 72 20 6c 69 73 74  sers = user list
3780: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
3790: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
37a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
37b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37c0: 23 23 23 23 0a 20 20 20 20 23 23 20 45 78 74 65  ####.    ## Exte
37d0: 6e 64 65 64 20 63 6f 6e 66 69 67 75 72 61 74 69  nded configurati
37e0: 6f 6e 20 6d 61 6e 61 67 65 6d 65 6e 74 2e 0a 0a  on management...
37f0: 20 20 20 20 6f 66 66 69 63 65 72 20 63 6f 6e 66      officer conf
3800: 69 67 20 7b 0a 09 64 65 73 63 72 69 70 74 69 6f  ig {..descriptio
3810: 6e 20 7b 0a 09 20 20 20 20 4d 61 6e 61 67 65 6d  n {..    Managem
3820: 65 6e 74 20 6f 66 20 61 20 66 6f 73 73 69 6c 20  ent of a fossil 
3830: 72 65 70 6f 73 69 74 6f 72 69 65 73 27 20 63 6f  repositories' co
3840: 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 69 6e 20  nfiguration, in 
3850: 64 65 74 61 69 6c 2e 0a 09 20 20 20 20 49 2e 65  detail...    I.e
3860: 2e 20 74 68 69 73 20 68 61 73 20 61 63 63 65 73  . this has acces
3870: 73 20 74 6f 20 61 6c 6c 20 74 68 65 20 69 6e 64  s to all the ind
3880: 69 76 69 64 75 61 6c 20 70 69 65 63 65 73 2e 0a  ividual pieces..
3890: 09 7d 0a 09 63 6f 6d 6d 6f 6e 20 2e 73 65 74 74  .}..common .sett
38a0: 69 6e 67 20 7b 0a 09 20 20 20 20 69 6e 70 75 74  ing {..    input
38b0: 20 73 65 74 74 69 6e 67 20 7b 0a 09 09 54 68 65   setting {...The
38c0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   name of the con
38d0: 66 69 67 75 72 61 74 69 6f 6e 20 73 65 74 74 69  figuration setti
38e0: 6e 67 20 74 6f 20 77 6f 72 6b 20 77 69 74 68 2e  ng to work with.
38f0: 0a 09 20 20 20 20 7d 20 7b 0a 09 09 76 61 6c 69  ..    } {...vali
3900: 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 73 65 74  date [fx::vt set
3910: 74 69 6e 67 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a  ting]..    }..}.
3920: 09 63 6f 6d 6d 6f 6e 20 2e 73 65 74 74 69 6e 67  .common .setting
3930: 2d 6c 69 73 74 20 7b 0a 09 20 20 20 20 69 6e 70  -list {..    inp
3940: 75 74 20 73 65 74 74 69 6e 67 20 7b 0a 09 09 54  ut setting {...T
3950: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
3960: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 65  configuration se
3970: 74 74 69 6e 67 73 20 74 6f 20 77 6f 72 6b 20 77  ttings to work w
3980: 69 74 68 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09  ith...    } {...
3990: 6c 69 73 74 0a 09 09 76 61 6c 69 64 61 74 65 20  list...validate 
39a0: 5b 66 78 3a 3a 76 74 20 73 65 74 74 69 6e 67 5d  [fx::vt setting]
39b0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 70 72 69  ..    }..}...pri
39c0: 76 61 74 65 20 61 76 61 69 6c 61 62 6c 65 20 7b  vate available {
39d0: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 43 6f  ..    section Co
39e0: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 09 20 20 20  nfiguration..   
39f0: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
3a00: 09 4c 69 73 74 20 61 6c 6c 20 61 76 61 69 6c 61  .List all availa
3a10: 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ble configuratio
3a20: 6e 20 73 65 74 74 69 6e 67 73 2e 0a 09 20 20 20  n settings...   
3a30: 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20   }..} [fx::call 
3a40: 63 6f 6e 66 69 67 20 61 76 61 69 6c 61 62 6c 65  config available
3a50: 5d 0a 0a 09 70 72 69 76 61 74 65 20 6c 69 73 74  ]...private list
3a60: 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20   {..    section 
3a70: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 09 20  Configuration.. 
3a80: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
3a90: 0a 09 09 4c 69 73 74 20 61 6c 6c 20 63 68 61 6e  ...List all chan
3aa0: 67 65 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ged configuratio
3ab0: 6e 20 73 65 74 74 69 6e 67 73 20 6f 66 20 74 68  n settings of th
3ac0: 65 0a 09 09 72 65 70 6f 73 69 74 6f 72 79 2c 20  e...repository, 
3ad0: 61 6e 64 20 74 68 65 69 72 20 76 61 6c 75 65 73  and their values
3ae0: 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73  ...    }..    us
3af0: 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09 7d  e .repository..}
3b00: 20 5b 66 78 3a 3a 63 61 6c 6c 20 63 6f 6e 66 69   [fx::call confi
3b10: 67 20 6c 69 73 74 5d 0a 09 64 65 66 61 75 6c 74  g list]..default
3b20: 0a 0a 09 70 72 69 76 61 74 65 20 67 65 74 20 7b  ...private get {
3b30: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 43 6f  ..    section Co
3b40: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 09 20 20 20  nfiguration..   
3b50: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
3b60: 09 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65  .Print the value
3b70: 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 63 6f   of the named co
3b80: 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 65 74 74  nfiguration sett
3b90: 69 6e 67 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20  ing...    }..   
3ba0: 20 75 73 65 20 2e 73 65 74 74 69 6e 67 0a 09 20   use .setting.. 
3bb0: 20 20 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f     use .reposito
3bc0: 72 79 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20  ry..} [fx::call 
3bd0: 63 6f 6e 66 69 67 20 67 65 74 5d 0a 0a 09 70 72  config get]...pr
3be0: 69 76 61 74 65 20 73 65 74 20 7b 0a 09 20 20 20  ivate set {..   
3bf0: 20 73 65 63 74 69 6f 6e 20 43 6f 6e 66 69 67 75   section Configu
3c00: 72 61 74 69 6f 6e 0a 09 20 20 20 20 64 65 73 63  ration..    desc
3c10: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 43 68 61 6e  ription {...Chan
3c20: 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
3c30: 74 68 65 20 6e 61 6d 65 64 0a 09 09 63 6f 6e 66  the named...conf
3c40: 69 67 75 72 61 74 69 6f 6e 20 73 65 74 74 69 6e  iguration settin
3c50: 67 20 74 6f 20 74 68 65 0a 09 09 67 69 76 65 6e  g to the...given
3c60: 20 74 65 78 74 2e 0a 09 20 20 20 20 7d 0a 09 20   text...    }.. 
3c70: 20 20 20 75 73 65 20 2e 73 65 74 74 69 6e 67 0a     use .setting.
3c80: 09 20 20 20 20 75 73 65 20 2e 67 6c 6f 62 61 6c  .    use .global
3c90: 0a 09 20 20 20 20 69 6e 70 75 74 20 76 61 6c 75  ..    input valu
3ca0: 65 20 7b 0a 09 09 54 68 65 20 6e 65 77 20 76 61  e {...The new va
3cb0: 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 66 69  lue of the confi
3cc0: 67 75 72 61 74 69 6f 6e 20 73 65 74 74 69 6e 67  guration setting
3cd0: 2e 0a 09 20 20 20 20 7d 20 7b 7d 0a 09 20 20 20  ...    } {}..   
3ce0: 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79   use .repository
3cf0: 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 63 6f  ..} [fx::call co
3d00: 6e 66 69 67 20 73 65 74 5d 0a 0a 09 70 72 69 76  nfig set]...priv
3d10: 61 74 65 20 75 6e 73 65 74 20 7b 0a 09 20 20 20  ate unset {..   
3d20: 20 73 65 63 74 69 6f 6e 20 43 6f 6e 66 69 67 75   section Configu
3d30: 72 61 74 69 6f 6e 0a 09 20 20 20 20 64 65 73 63  ration..    desc
3d40: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 52 65 6d 6f  ription {...Remo
3d50: 76 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ve the specified
3d60: 20 6c 6f 63 61 6c 20 63 6f 6e 66 69 67 75 72 61   local configura
3d70: 74 69 6f 6e 20 73 65 74 74 69 6e 67 2e 0a 09 09  tion setting....
3d80: 54 68 69 73 20 73 65 74 73 20 69 74 20 62 61 63  This sets it bac
3d90: 6b 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d 20  k to the system 
3da0: 64 65 66 61 75 6c 74 2e 0a 09 20 20 20 20 7d 0a  default...    }.
3db0: 09 20 20 20 20 75 73 65 20 2e 72 65 70 6f 73 69  .    use .reposi
3dc0: 74 6f 72 79 0a 09 20 20 20 20 75 73 65 20 2e 67  tory..    use .g
3dd0: 6c 6f 62 61 6c 0a 09 20 20 20 20 75 73 65 20 2e  lobal..    use .
3de0: 73 65 74 74 69 6e 67 2d 6c 69 73 74 0a 09 7d 20  setting-list..} 
3df0: 5b 66 78 3a 3a 63 61 6c 6c 20 63 6f 6e 66 69 67  [fx::call config
3e00: 20 75 6e 73 65 74 5d 0a 0a 09 23 20 53 74 61 6e   unset]...# Stan
3e10: 64 61 72 64 20 66 6f 73 73 69 6c 20 63 6c 69 20  dard fossil cli 
3e20: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  configuration co
3e30: 6d 6d 61 6e 64 73 2c 20 69 6d 70 6c 65 6d 65 6e  mmands, implemen
3e40: 74 20 6d 61 79 62 65 2e 0a 09 23 20 70 75 73 68  t maybe...# push
3e50: 0a 09 23 20 70 75 6c 6c 0a 09 23 20 73 79 6e 63  ..# pull..# sync
3e60: 0a 09 23 20 6d 65 72 67 65 0a 09 23 20 65 78 70  ..# merge..# exp
3e70: 6f 72 74 0a 09 23 20 69 6d 70 6f 72 74 0a 09 23  ort..# import..#
3e80: 20 72 65 73 65 74 0a 20 20 20 20 7d 0a 0a 20 20   reset.    }..  
3e90: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
3ea0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
3eb0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
3ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ed0: 0a 20 20 20 20 23 23 20 52 65 70 6f 72 74 20 6d  .    ## Report m
3ee0: 61 6e 61 67 65 6d 65 6e 74 2e 20 55 73 69 6e 67  anagement. Using
3ef0: 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 72 65 70   an external rep
3f00: 6f 72 74 20 66 6f 72 6d 61 74 20 77 68 69 63 68  ort format which
3f10: 20 69 73 0a 20 20 20 20 23 23 20 65 61 73 69 65   is.    ## easie
3f20: 72 20 74 6f 20 77 72 69 74 65 20 62 79 20 61 20  r to write by a 
3f30: 68 75 6d 61 6e 20 62 65 69 6e 67 2e 20 41 6c 73  human being. Als
3f40: 6f 20 6e 69 63 65 72 20 74 61 62 6c 65 20 6f 75  o nicer table ou
3f50: 74 70 75 74 2c 20 61 6e 64 0a 20 20 20 20 23 23  tput, and.    ##
3f60: 20 73 74 72 75 63 74 75 72 65 64 20 6f 75 74 70   structured outp
3f70: 75 74 2e 0a 0a 20 20 20 20 23 20 43 6f 6d 70 6f  ut...    # Compo
3f80: 6e 65 6e 74 73 3a 0a 20 20 20 20 23 20 2d 20 6e  nents:.    # - n
3f90: 61 6d 65 20 28 61 6b 61 20 74 69 74 6c 65 29 0a  ame (aka title).
3fa0: 20 20 20 20 23 20 2d 20 73 71 6c 20 28 73 65 6c      # - sql (sel
3fb0: 65 63 74 20 73 74 61 74 65 6d 65 6e 74 29 20 20  ect statement)  
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 73              -- s
3fd0: 68 6f 75 6c 64 20 68 61 76 65 20 61 20 74 65 6d  hould have a tem
3fe0: 70 6c 61 74 65 20 74 6f 20 75 73 65 0a 20 20 20  plate to use.   
3ff0: 20 23 20 2d 20 63 6f 6c 6f 72 20 6b 65 79 20 28   # - color key (
4000: 6d 61 70 3a 20 23 72 72 67 67 62 62 20 3d 3e 20  map: #rrggbb => 
4010: 73 74 72 69 6e 67 29 20 20 2d 2d 20 73 68 6f 75  string)  -- shou
4020: 6c 64 20 68 61 76 65 20 61 20 74 65 6d 70 6c 61  ld have a templa
4030: 74 65 0a 20 20 20 20 23 20 4e 6f 74 65 20 21 20  te.    # Note ! 
4040: 54 68 65 20 63 6f 6c 6f 72 20 6b 65 79 20 69 73  The color key is
4050: 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 70 61 72   an optional par
4060: 74 20 6f 66 20 61 20 72 65 70 6f 72 74 27 73 20  t of a report's 
4070: 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 20 20 20 20  definition..    
4080: 23 0a 20 20 20 20 23 20 54 65 6d 70 6c 61 74 65  #.    # Template
4090: 73 0a 20 20 20 20 23 20 2d 20 63 6f 6c 6f 72 20  s.    # - color 
40a0: 6b 65 79 0a 20 20 20 20 23 20 2d 20 73 71 6c 0a  key.    # - sql.
40b0: 20 20 20 20 23 0a 20 20 20 20 23 20 4f 70 65 72      #.    # Oper
40c0: 61 74 69 6f 6e 73 0a 20 20 20 20 23 20 2d 20 74  ations.    # - t
40d0: 65 6d 70 6c 61 74 65 2d 73 70 65 63 20 20 20 2d  emplate-spec   -
40e0: 20 53 65 74 20 73 71 6c 20 74 65 6d 70 6c 61 74   Set sql templat
40f0: 65 0a 20 20 20 20 23 20 2d 20 74 65 6d 70 6c 61  e.    # - templa
4100: 74 65 2d 63 6f 6c 6f 72 73 20 2d 20 53 65 74 20  te-colors - Set 
4110: 63 6f 6c 6f 72 20 6b 65 79 20 74 65 6d 70 6c 61  color key templa
4120: 74 65 0a 20 20 20 20 23 20 2d 20 6c 69 73 74 20  te.    # - list 
4130: 20 20 20 20 20 20 20 20 20 20 20 2d 20 4c 69 73             - Lis
4140: 74 20 28 74 61 62 6c 65 2c 20 72 61 77 2c 20 6a  t (table, raw, j
4150: 73 6f 6e 29 0a 20 20 20 20 23 20 2d 20 61 64 64  son).    # - add
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20 43               - C
4170: 72 65 61 74 65 20 6e 61 6d 65 20 3f 73 71 6c 3f  reate name ?sql?
4180: 0a 20 20 20 20 23 20 2d 20 72 65 6e 61 6d 65 20  .    # - rename 
4190: 20 20 20 20 20 20 20 20 20 2d 20 43 68 61 6e 67           - Chang
41a0: 65 20 6e 61 6d 65 0a 20 20 20 20 23 20 2d 20 73  e name.    # - s
41b0: 65 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d  et             -
41c0: 20 43 68 61 6e 67 65 20 73 71 6c 0a 20 20 20 20   Change sql.    
41d0: 23 20 2d 20 73 65 74 2d 63 6f 6c 6f 72 73 20 20  # - set-colors  
41e0: 20 20 20 20 2d 20 43 68 61 6e 67 65 20 63 6f 6c      - Change col
41f0: 6f 72 73 0a 20 20 20 20 23 20 2d 20 64 65 6c 65  ors.    # - dele
4200: 74 65 20 20 20 20 20 20 20 20 20 20 2d 20 44 65  te          - De
4210: 6c 65 74 65 20 6e 61 6d 65 7c 69 64 2e 2e 2e 0a  lete name|id....
4220: 20 20 20 20 23 20 2d 20 65 78 70 6f 72 74 20 20      # - export  
4230: 20 20 20 20 20 20 20 20 2d 20 45 78 70 6f 72 74          - Export
4240: 20 3f 6e 61 6d 65 7c 69 64 2e 2e 2e 3f 20 2d 20   ?name|id...? - 
4250: 52 65 73 74 72 69 63 74 65 64 20 65 78 70 6f 72  Restricted expor
4260: 74 2c 20 73 71 6c 20 6f 72 20 63 6f 6c 6f 72 0a  t, sql or color.
4270: 20 20 20 20 23 20 2d 20 69 6d 70 6f 72 74 20 20      # - import  
4280: 20 20 20 20 20 20 20 20 2d 20 49 6d 70 6f 72 74          - Import
4290: 20 66 69 6c 65 0a 20 20 20 20 23 20 2d 20 72 75   file.    # - ru
42a0: 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20  n             - 
42b0: 52 75 6e 20 6e 61 6d 65 0a 20 20 20 20 23 20 2d  Run name.    # -
42c0: 20 72 75 6e 20 20 20 20 20 20 20 20 20 20 20 20   run            
42d0: 20 2d 20 52 75 6e 20 3c 73 71 6c 3e 7c 3c 73 71   - Run <sql>|<sq
42e0: 6c 66 69 6c 65 3e 20 20 28 63 72 65 61 74 65 20  lfile>  (create 
42f0: 2b 20 72 75 6e 20 2b 20 64 65 6c 65 74 65 2c 20  + run + delete, 
4300: 74 6d 70 2d 6e 61 6d 65 29 0a 20 20 20 20 23 20  tmp-name).    # 
4310: 2d 20 65 64 69 74 20 20 20 20 20 20 20 20 20 20  - edit          
4320: 20 20 2d 20 45 64 69 74 20 6e 61 6d 65 20 20 20    - Edit name   
4330: 3d 3e 20 61 75 74 6f 2d 63 61 6c 6c 73 20 65 64  => auto-calls ed
4340: 69 74 6f 72 2c 20 28 65 78 70 6f 72 74 20 2b 20  itor, (export + 
4350: 65 64 69 74 20 2b 20 69 6d 70 6f 72 74 2c 20 74  edit + import, t
4360: 6d 70 2d 66 69 6c 65 29 0a 20 20 20 20 23 20 2d  mp-file).    # -
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 2d 20 20 72 65 73 74 72 69 63 74 65 64 20 3d   -  restricted =
4390: 3e 20 73 71 6c 2c 20 6f 72 20 63 6f 6c 6f 72 73  > sql, or colors
43a0: 0a 0a 20 20 20 20 6f 66 66 69 63 65 72 20 72 65  ..    officer re
43b0: 70 6f 72 74 20 7b 0a 09 64 65 73 63 72 69 70 74  port {..descript
43c0: 69 6f 6e 20 7b 0a 09 20 20 20 20 4d 61 6e 61 67  ion {..    Manag
43d0: 65 6d 65 6e 74 20 6f 66 20 61 20 66 6f 73 73 69  ement of a fossi
43e0: 6c 20 72 65 70 6f 73 69 74 6f 72 69 65 73 27 20  l repositories' 
43f0: 73 65 74 20 6f 66 20 74 69 63 6b 65 74 20 72 65  set of ticket re
4400: 70 6f 72 74 73 2e 0a 09 7d 0a 0a 09 63 6f 6d 6d  ports...}...comm
4410: 6f 6e 20 2a 61 6c 6c 2a 20 2d 65 78 74 65 6e 64  on *all* -extend
4420: 20 7b 0a 09 20 20 20 20 75 73 65 20 2e 72 65 70   {..    use .rep
4430: 6f 73 69 74 6f 72 79 0a 09 7d 0a 0a 09 63 6f 6d  ository..}...com
4440: 6d 6f 6e 20 2e 73 70 65 63 20 7b 0a 09 20 20 20  mon .spec {..   
4450: 20 69 6e 70 75 74 20 73 70 65 63 20 7b 0a 09 09   input spec {...
4460: 52 65 70 6f 72 74 20 73 70 65 63 69 66 69 63 61  Report specifica
4470: 74 69 6f 6e 2e 0a 09 09 44 65 66 61 75 6c 74 73  tion....Defaults
4480: 20 74 6f 20 72 65 61 64 69 6e 67 20 69 74 20 66   to reading it f
4490: 72 6f 6d 20 73 74 64 69 6e 2e 0a 09 20 20 20 20  rom stdin...    
44a0: 7d 20 7b 0a 09 09 6f 70 74 69 6f 6e 61 6c 0a 09  } {...optional..
44b0: 09 76 61 6c 69 64 61 74 65 20 73 74 72 0a 09 09  .validate str...
44c0: 67 65 6e 65 72 61 74 65 20 5b 6c 61 6d 62 64 61  generate [lambda
44d0: 20 70 20 7b 20 72 65 61 64 20 73 74 64 69 6e 20   p { read stdin 
44e0: 7d 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 63  }]..    }..}...c
44f0: 6f 6d 6d 6f 6e 20 2e 63 6f 6c 6f 72 6b 65 79 20  ommon .colorkey 
4500: 7b 0a 09 20 20 20 20 69 6e 70 75 74 20 63 6f 6c  {..    input col
4510: 6f 72 73 20 7b 0a 09 09 43 6f 6c 6f 72 20 6b 65  ors {...Color ke
4520: 79 0a 09 09 44 65 66 61 75 6c 74 73 20 74 6f 20  y...Defaults to 
4530: 72 65 61 64 69 6e 67 20 69 74 20 66 72 6f 6d 20  reading it from 
4540: 73 74 64 69 6e 2e 0a 09 20 20 20 20 7d 20 7b 0a  stdin...    } {.
4550: 09 09 6f 70 74 69 6f 6e 61 6c 0a 09 09 76 61 6c  ..optional...val
4560: 69 64 61 74 65 20 73 74 72 0a 09 09 67 65 6e 65  idate str...gene
4570: 72 61 74 65 20 5b 6c 61 6d 62 64 61 20 70 20 7b  rate [lambda p {
4580: 20 72 65 61 64 20 73 74 64 69 6e 20 7d 5d 0a 09   read stdin }]..
4590: 20 20 20 20 7d 0a 09 7d 0a 0a 09 63 6f 6d 6d 6f      }..}...commo
45a0: 6e 20 2e 6f 6e 6c 79 20 7b 0a 09 20 20 20 20 6f  n .only {..    o
45b0: 70 74 69 6f 6e 20 6f 6e 6c 79 20 7b 0a 09 09 52  ption only {...R
45c0: 65 73 74 72 69 63 74 20 74 68 65 20 6f 70 65 72  estrict the oper
45d0: 61 74 69 6f 6e 20 74 6f 20 61 20 70 61 72 74 20  ation to a part 
45e0: 6f 66 20 74 68 65 20 72 65 70 6f 72 74 2c 20 69  of the report, i
45f0: 2e 65 2e 0a 09 09 65 69 74 68 65 72 20 73 70 65  .e....either spe
4600: 63 69 66 69 63 61 74 69 6f 6e 20 28 73 71 6c 29  cification (sql)
4610: 20 6f 72 20 63 6f 6c 6f 72 20 6b 65 79 20 28 63   or color key (c
4620: 6f 6c 6f 72 29 2e 0a 09 20 20 20 20 7d 20 7b 20  olor)...    } { 
4630: 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74  validate [fx::vt
4640: 20 72 65 70 6f 72 74 2d 70 61 72 74 5d 20 7d 0a   report-part] }.
4650: 09 7d 0a 0a 09 23 20 65 78 65 63 75 74 65 20 61  .}...# execute a
4660: 20 72 65 70 6f 72 74 20 2e 2e 2e 20 70 72 6f 70   report ... prop
4670: 65 72 20 6d 61 74 72 69 78 20 6f 75 74 70 75 74  er matrix output
4680: 2c 20 6a 73 6f 6e 20 6f 75 74 70 75 74 2c 20 6e  , json output, n
4690: 65 73 74 65 64 20 74 63 6c 0a 09 23 20 65 78 65  ested tcl..# exe
46a0: 63 75 74 65 20 61 20 74 65 6d 70 20 72 65 70 6f  cute a temp repo
46b0: 72 74 20 3d 3e 20 65 6e 74 65 72 20 61 20 72 65  rt => enter a re
46c0: 70 6f 72 74 2c 20 65 78 65 63 75 74 65 20 69 74  port, execute it
46d0: 2c 20 64 65 6c 65 74 65 20 69 74 2e 0a 09 23 20  , delete it...# 
46e0: 73 65 65 20 69 66 20 77 65 20 63 61 6e 20 67 65  see if we can ge
46f0: 74 20 72 65 70 6f 72 74 73 20 70 61 72 61 6d 65  t reports parame
4700: 74 65 72 69 7a 65 64 2e 20 61 74 20 6c 65 61 73  terized. at leas
4710: 74 20 66 72 6f 6d 20 66 78 2e 0a 0a 09 70 72 69  t from fx....pri
4720: 76 61 74 65 20 6c 69 73 74 20 7b 0a 09 20 20 20  vate list {..   
4730: 20 73 65 63 74 69 6f 6e 20 52 65 70 6f 72 74 69   section Reporti
4740: 6e 67 0a 09 20 20 20 20 64 65 73 63 72 69 70 74  ng..    descript
4750: 69 6f 6e 20 7b 0a 09 09 4c 69 73 74 20 61 6c 6c  ion {...List all
4760: 20 72 65 70 6f 72 74 73 20 66 6f 75 6e 64 20 69   reports found i
4770: 6e 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79  n the repository
4780: 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 6f 70  ...    }..    op
4790: 74 69 6f 6e 20 6a 73 6f 6e 20 7b 0a 09 09 50 72  tion json {...Pr
47a0: 69 6e 74 20 74 68 65 20 64 61 74 61 20 66 6f 72  int the data for
47b0: 6d 61 74 74 65 64 20 61 73 20 4a 53 4f 4e 20 61  matted as JSON a
47c0: 72 72 61 79 2e 0a 09 09 43 61 6e 6e 6f 74 20 62  rray....Cannot b
47d0: 65 20 75 73 65 64 20 74 6f 67 65 74 68 65 72 20  e used together 
47e0: 77 69 74 68 20 2d 2d 72 61 77 0a 09 20 20 20 20  with --raw..    
47f0: 7d 20 7b 20 70 72 65 73 65 6e 63 65 20 3b 20 77  } { presence ; w
4800: 68 65 6e 2d 73 65 74 20 5b 66 78 3a 3a 65 78 63  hen-set [fx::exc
4810: 6c 75 64 65 20 72 61 77 5d 20 7d 0a 09 20 20 20  lude raw] }..   
4820: 20 6f 70 74 69 6f 6e 20 72 61 77 20 7b 0a 09 09   option raw {...
4830: 50 72 69 6e 74 20 74 68 65 20 72 61 77 20 6e 61  Print the raw na
4840: 6d 65 73 2e 0a 09 09 43 61 6e 6e 6f 74 20 62 65  mes....Cannot be
4850: 20 75 73 65 64 20 74 6f 67 65 74 68 65 72 20 77   used together w
4860: 69 74 68 20 2d 2d 6a 73 6f 6e 0a 09 20 20 20 20  ith --json..    
4870: 7d 20 7b 20 70 72 65 73 65 6e 63 65 20 3b 20 77  } { presence ; w
4880: 68 65 6e 2d 73 65 74 20 5b 66 78 3a 3a 65 78 63  hen-set [fx::exc
4890: 6c 75 64 65 20 6a 73 6f 6e 5d 20 7d 0a 0a 09 20  lude json] }... 
48a0: 20 20 20 23 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d     # options: --
48b0: 6a 73 6f 6e 2c 20 2d 2d 72 61 77 0a 09 7d 20 5b  json, --raw..} [
48c0: 66 78 3a 3a 63 61 6c 6c 20 72 65 70 6f 72 74 20  fx::call report 
48d0: 6c 69 73 74 5d 0a 09 64 65 66 61 75 6c 74 0a 0a  list]..default..
48e0: 09 70 72 69 76 61 74 65 20 61 64 64 20 7b 0a 09  .private add {..
48f0: 20 20 20 20 73 65 63 74 69 6f 6e 20 52 65 70 6f      section Repo
4900: 72 74 69 6e 67 0a 09 20 20 20 20 64 65 73 63 72  rting..    descr
4910: 69 70 74 69 6f 6e 20 7b 0a 09 09 41 64 64 20 61  iption {...Add a
4920: 20 72 65 70 6f 72 74 20 64 65 66 69 6e 69 74 69   report definiti
4930: 6f 6e 20 74 6f 20 74 68 65 20 72 65 70 6f 73 69  on to the reposi
4940: 74 6f 72 79 2e 0a 09 20 20 20 20 7d 0a 09 20 20  tory...    }..  
4950: 20 20 23 20 2e 2e 2e 20 3f 6f 77 6e 65 72 3f 2c    # ... ?owner?,
4960: 20 74 69 74 6c 65 2c 20 28 63 6f 6c 73 2c 20 73   title, (cols, s
4970: 71 6c 29 0a 09 20 20 20 20 6f 70 74 69 6f 6e 20  ql)..    option 
4980: 6f 77 6e 65 72 20 7b 0a 09 09 53 70 65 63 69 66  owner {...Specif
4990: 79 20 74 68 65 20 6f 77 6e 65 72 20 6f 66 20 74  y the owner of t
49a0: 68 65 20 72 65 70 6f 72 74 2e 0a 09 09 44 65 66  he report....Def
49b0: 61 75 6c 74 73 20 74 6f 20 74 68 65 20 75 6e 69  aults to the uni
49c0: 78 20 75 73 65 72 20 72 75 6e 6e 69 6e 67 20 74  x user running t
49d0: 68 65 20 63 6f 6d 6d 61 6e 64 2e 0a 09 20 20 20  he command...   
49e0: 20 7d 20 7b 0a 09 09 76 61 6c 69 64 61 74 65 20   } {...validate 
49f0: 73 74 72 0a 09 09 64 65 66 61 75 6c 74 20 5b 6c  str...default [l
4a00: 61 6d 62 64 61 20 70 20 7b 20 73 65 74 20 3a 3a  ambda p { set ::
4a10: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65  tcl_platform(use
4a20: 72 29 20 7d 5d 0a 09 20 20 20 20 7d 0a 09 20 20  r) }]..    }..  
4a30: 20 20 69 6e 70 75 74 20 74 69 74 6c 65 20 7b 0a    input title {.
4a40: 09 09 54 68 65 20 72 65 70 6f 72 74 27 73 20 6e  ..The report's n
4a50: 61 6d 65 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09  ame...    } {...
4a60: 76 61 6c 69 64 61 74 65 20 73 74 72 0a 09 20 20  validate str..  
4a70: 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 73 70    }..    use .sp
4a80: 65 63 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20  ec..} [fx::call 
4a90: 72 65 70 6f 72 74 20 61 64 64 5d 0a 0a 09 70 72  report add]...pr
4aa0: 69 76 61 74 65 20 72 65 6e 61 6d 65 20 7b 0a 09  ivate rename {..
4ab0: 20 20 20 20 73 65 63 74 69 6f 6e 20 52 65 70 6f      section Repo
4ac0: 72 74 69 6e 67 0a 09 20 20 20 20 64 65 73 63 72  rting..    descr
4ad0: 69 70 74 69 6f 6e 20 7b 0a 09 09 52 65 6e 61 6d  iption {...Renam
4ae0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified 
4af0: 72 65 70 6f 72 74 2e 0a 09 20 20 20 20 7d 0a 09  report...    }..
4b00: 20 20 20 20 69 6e 70 75 74 20 69 64 20 7b 0a 09      input id {..
4b10: 09 49 64 20 6f 72 20 6e 61 6d 65 20 6f 66 20 74  .Id or name of t
4b20: 68 65 20 72 65 70 6f 72 74 20 74 6f 20 72 65 6e  he report to ren
4b30: 61 6d 65 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09  ame...    } {...
4b40: 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74  validate [fx::vt
4b50: 20 72 65 70 6f 72 74 2d 69 64 5d 0a 09 20 20 20   report-id]..   
4b60: 20 7d 0a 09 20 20 20 20 69 6e 70 75 74 20 6e 65   }..    input ne
4b70: 77 6e 61 6d 65 20 7b 0a 09 09 4e 65 77 20 6e 61  wname {...New na
4b80: 6d 65 20 6f 66 20 74 68 65 20 72 65 70 6f 72 74  me of the report
4b90: 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09 76 61 6c  ...    } {...val
4ba0: 69 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 6e 6f  idate [fx::vt no
4bb0: 74 2d 72 65 70 6f 72 74 2d 69 64 5d 0a 09 20 20  t-report-id]..  
4bc0: 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c    }..} [fx::call
4bd0: 20 72 65 70 6f 72 74 20 72 65 6e 61 6d 65 5d 0a   report rename].
4be0: 0a 09 70 72 69 76 61 74 65 20 73 65 74 20 7b 0a  ..private set {.
4bf0: 09 20 20 20 20 73 65 63 74 69 6f 6e 20 52 65 70  .    section Rep
4c00: 6f 72 74 69 6e 67 0a 09 20 20 20 20 64 65 73 63  orting..    desc
4c10: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 43 68 61 6e  ription {...Chan
4c20: 67 65 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  ge the definitio
4c30: 6e 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69  n of the specifi
4c40: 65 64 20 72 65 70 6f 72 74 2e 0a 09 20 20 20 20  ed report...    
4c50: 7d 0a 09 20 20 20 20 69 6e 70 75 74 20 69 64 20  }..    input id 
4c60: 7b 0a 09 09 49 64 20 6f 72 20 6e 61 6d 65 20 6f  {...Id or name o
4c70: 66 20 74 68 65 20 72 65 70 6f 72 74 20 74 6f 20  f the report to 
4c80: 63 68 61 6e 67 65 2e 0a 09 20 20 20 20 7d 20 7b  change...    } {
4c90: 0a 09 09 76 61 6c 69 64 61 74 65 20 5b 66 78 3a  ...validate [fx:
4ca0: 3a 76 74 20 72 65 70 6f 72 74 2d 69 64 5d 0a 09  :vt report-id]..
4cb0: 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e      }..    use .
4cc0: 73 70 65 63 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c  spec..} [fx::cal
4cd0: 6c 20 72 65 70 6f 72 74 20 72 65 64 65 66 69 6e  l report redefin
4ce0: 65 5d 0a 09 61 6c 69 61 73 20 72 65 64 65 66 69  e]..alias redefi
4cf0: 6e 65 0a 0a 09 70 72 69 76 61 74 65 20 73 65 74  ne...private set
4d00: 2d 63 6f 6c 6f 72 73 20 7b 0a 09 20 20 20 20 73  -colors {..    s
4d10: 65 63 74 69 6f 6e 20 52 65 70 6f 72 74 69 6e 67  ection Reporting
4d20: 0a 09 20 20 20 20 64 65 73 63 72 69 70 74 69 6f  ..    descriptio
4d30: 6e 20 7b 0a 09 09 43 68 61 6e 67 65 20 74 68 65  n {...Change the
4d40: 20 63 6f 6c 6f 72 20 6b 65 79 20 6f 66 20 74 68   color key of th
4d50: 65 20 73 70 65 63 69 66 69 65 64 20 72 65 70 6f  e specified repo
4d60: 72 74 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  rt...    }..    
4d70: 69 6e 70 75 74 20 69 64 20 7b 0a 09 09 49 64 20  input id {...Id 
4d80: 6f 72 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 72  or name of the r
4d90: 65 70 6f 72 74 20 74 6f 20 63 68 61 6e 67 65 2e  eport to change.
4da0: 0a 09 20 20 20 20 7d 20 7b 0a 09 09 76 61 6c 69  ..    } {...vali
4db0: 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 72 65 70  date [fx::vt rep
4dc0: 6f 72 74 2d 69 64 5d 0a 09 20 20 20 20 7d 0a 09  ort-id]..    }..
4dd0: 20 20 20 20 75 73 65 20 2e 63 6f 6c 6f 72 6b 65      use .colorke
4de0: 79 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 72  y..} [fx::call r
4df0: 65 70 6f 72 74 20 73 65 74 2d 63 6f 6c 6f 72 73  eport set-colors
4e00: 5d 0a 0a 09 70 72 69 76 61 74 65 20 65 78 70 6f  ]...private expo
4e10: 72 74 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f  rt {..    sectio
4e20: 6e 20 52 65 70 6f 72 74 69 6e 67 0a 09 20 20 20  n Reporting..   
4e30: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
4e40: 09 45 78 70 6f 72 74 20 6f 6e 65 20 6f 72 20 6d  .Export one or m
4e50: 6f 72 65 20 72 65 70 6f 72 74 73 20 69 6e 74 6f  ore reports into
4e60: 20 61 20 66 69 6c 65 2e 20 44 65 66 61 75 6c 74   a file. Default
4e70: 73 20 74 6f 20 61 6c 6c 2e 0a 09 20 20 20 20 7d  s to all...    }
4e80: 0a 09 20 20 20 20 75 73 65 20 2e 65 78 70 6f 72  ..    use .expor
4e90: 74 0a 09 20 20 20 20 75 73 65 20 2e 6f 6e 6c 79  t..    use .only
4ea0: 0a 09 20 20 20 20 69 6e 70 75 74 20 69 64 20 7b  ..    input id {
4eb0: 0a 09 09 49 64 20 6f 72 20 6e 61 6d 65 20 6f 66  ...Id or name of
4ec0: 20 74 68 65 20 72 65 70 6f 72 74 28 73 29 20 74   the report(s) t
4ed0: 6f 20 65 78 70 6f 72 74 2e 0a 09 20 20 20 20 7d  o export...    }
4ee0: 20 7b 0a 09 09 6f 70 74 69 6f 6e 61 6c 20 3b 20   {...optional ; 
4ef0: 6c 69 73 74 0a 09 09 76 61 6c 69 64 61 74 65 20  list...validate 
4f00: 5b 66 78 3a 3a 76 74 20 72 65 70 6f 72 74 2d 69  [fx::vt report-i
4f10: 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78  d]..    }..} [fx
4f20: 3a 3a 63 61 6c 6c 20 72 65 70 6f 72 74 20 65 78  ::call report ex
4f30: 70 6f 72 74 5d 0a 0a 09 70 72 69 76 61 74 65 20  port]...private 
4f40: 69 6d 70 6f 72 74 20 7b 0a 09 20 20 20 20 73 65  import {..    se
4f50: 63 74 69 6f 6e 20 52 65 70 6f 72 74 69 6e 67 0a  ction Reporting.
4f60: 09 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e  .    description
4f70: 20 7b 0a 09 09 49 6d 70 6f 72 74 20 72 65 70 6f   {...Import repo
4f80: 72 74 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 66  rt definitions f
4f90: 72 6f 6d 20 61 20 66 69 6c 65 2e 0a 09 20 20 20  rom a file...   
4fa0: 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 69 6d 70   }..    use .imp
4fb0: 6f 72 74 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c  ort..} [fx::call
4fc0: 20 72 65 70 6f 72 74 20 69 6d 70 6f 72 74 5d 0a   report import].
4fd0: 0a 09 70 72 69 76 61 74 65 20 65 64 69 74 20 7b  ..private edit {
4fe0: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 52 65  ..    section Re
4ff0: 70 6f 72 74 69 6e 67 0a 09 20 20 20 20 64 65 73  porting..    des
5000: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 49 6e 74  cription {...Int
5010: 65 72 61 63 74 69 76 65 6c 79 20 65 64 69 74 20  eractively edit 
5020: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 72 65  the specified re
5030: 70 6f 72 74 20 75 73 69 6e 67 20 74 68 65 0a 09  port using the..
5040: 09 61 70 70 6c 69 63 61 74 69 6f 6e 20 73 70 65  .application spe
5050: 63 69 66 69 65 64 20 62 79 20 74 68 65 20 65 6e  cified by the en
5060: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
5070: 6c 65 0a 09 09 45 44 49 54 4f 52 2e 0a 09 20 20  le...EDITOR...  
5080: 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 6f 6e    }..    use .on
5090: 6c 79 0a 09 20 20 20 20 69 6e 70 75 74 20 69 64  ly..    input id
50a0: 20 7b 0a 09 09 49 64 20 6f 72 20 6e 61 6d 65 20   {...Id or name 
50b0: 6f 66 20 74 68 65 20 72 65 70 6f 72 74 20 74 6f  of the report to
50c0: 20 65 64 69 74 2e 0a 09 09 49 66 20 6e 6f 74 20   edit....If not 
50d0: 73 70 65 63 69 66 69 65 64 20 73 74 61 72 74 20  specified start 
50e0: 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
50f0: 20 74 65 6d 70 6c 61 74 65 73 2e 0a 09 20 20 20   templates...   
5100: 20 7d 20 7b 0a 09 09 6f 70 74 69 6f 6e 61 6c 0a   } {...optional.
5110: 09 09 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a  ..validate [fx::
5120: 76 74 20 72 65 70 6f 72 74 2d 69 64 5d 0a 09 20  vt report-id].. 
5130: 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c     }..} [fx::cal
5140: 6c 20 72 65 70 6f 72 74 20 65 64 69 74 5d 0a 0a  l report edit]..
5150: 09 70 72 69 76 61 74 65 20 64 65 6c 65 74 65 20  .private delete 
5160: 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 52  {..    section R
5170: 65 70 6f 72 74 69 6e 67 0a 09 20 20 20 20 64 65  eporting..    de
5180: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 44 65  scription {...De
5190: 6c 65 74 65 20 74 68 65 20 73 70 65 63 69 66 69  lete the specifi
51a0: 65 64 20 72 65 70 6f 72 74 20 64 65 66 69 6e 69  ed report defini
51b0: 74 69 6f 6e 2e 0a 09 20 20 20 20 7d 0a 09 20 20  tion...    }..  
51c0: 20 20 69 6e 70 75 74 20 69 64 20 7b 0a 09 09 49    input id {...I
51d0: 64 20 6f 72 20 6e 61 6d 65 20 6f 66 20 74 68 65  d or name of the
51e0: 20 72 65 70 6f 72 74 28 73 29 20 74 6f 20 64 65   report(s) to de
51f0: 6c 65 74 65 2e 0a 09 20 20 20 20 7d 20 7b 0a 09  lete...    } {..
5200: 09 6c 69 73 74 0a 09 09 76 61 6c 69 64 61 74 65  .list...validate
5210: 20 5b 66 78 3a 3a 76 74 20 72 65 70 6f 72 74 2d   [fx::vt report-
5220: 69 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66  id]..    }..} [f
5230: 78 3a 3a 63 61 6c 6c 20 72 65 70 6f 72 74 20 64  x::call report d
5240: 65 6c 65 74 65 5d 0a 0a 09 70 72 69 76 61 74 65  elete]...private
5250: 20 72 75 6e 20 7b 0a 09 20 20 20 20 73 65 63 74   run {..    sect
5260: 69 6f 6e 20 52 65 70 6f 72 74 69 6e 67 0a 09 20  ion Reporting.. 
5270: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
5280: 0a 09 09 45 78 65 63 75 74 65 20 74 68 65 20 73  ...Execute the s
5290: 70 65 63 69 66 69 65 64 20 72 65 70 6f 72 74 20  pecified report 
52a0: 64 65 66 69 6e 69 74 69 6f 6e 20 61 6e 64 20 70  definition and p
52b0: 72 69 6e 74 20 74 68 65 20 72 65 73 75 6c 74 73  rint the results
52c0: 20 74 6f 20 73 74 64 6f 75 74 2e 0a 09 09 57 69   to stdout....Wi
52d0: 74 68 6f 75 74 20 61 20 73 70 65 63 69 66 69 63  thout a specific
52e0: 61 74 69 6f 6e 20 72 65 61 64 20 74 68 65 20 64  ation read the d
52f0: 65 66 69 6e 69 74 69 6f 6e 20 66 72 6f 6d 20 73  efinition from s
5300: 74 64 69 6e 20 66 6f 72 20 61 20 74 65 6d 70 6f  tdin for a tempo
5310: 72 61 72 79 20 72 65 70 6f 72 74 2e 0a 09 20 20  rary report...  
5320: 20 20 7d 0a 09 20 20 20 20 69 6e 70 75 74 20 69    }..    input i
5330: 64 20 7b 0a 09 09 49 64 20 6f 72 20 6e 61 6d 65  d {...Id or name
5340: 20 6f 66 20 74 68 65 20 72 65 70 6f 72 74 20 74   of the report t
5350: 6f 20 72 75 6e 2e 0a 09 20 20 20 20 7d 20 7b 0a  o run...    } {.
5360: 09 09 6f 70 74 69 6f 6e 61 6c 0a 09 09 76 61 6c  ..optional...val
5370: 69 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 72 65  idate [fx::vt re
5380: 70 6f 72 74 2d 69 64 5d 0a 09 20 20 20 20 7d 0a  port-id]..    }.
5390: 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 72 65 70  .} [fx::call rep
53a0: 6f 72 74 20 72 75 6e 5d 0a 0a 09 70 72 69 76 61  ort run]...priva
53b0: 74 65 20 74 65 6d 70 6c 61 74 65 2d 63 6f 6c 6f  te template-colo
53c0: 72 73 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f  rs {..    sectio
53d0: 6e 20 52 65 70 6f 72 74 69 6e 67 0a 09 20 20 20  n Reporting..   
53e0: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
53f0: 09 53 65 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  .Set the global 
5400: 63 6f 6c 6f 72 20 6b 65 79 20 74 65 6d 70 6c 61  color key templa
5410: 74 65 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  te...    }..    
5420: 75 73 65 20 2e 63 6f 6c 6f 72 6b 65 79 0a 09 7d  use .colorkey..}
5430: 20 5b 66 78 3a 3a 63 61 6c 6c 20 72 65 70 6f 72   [fx::call repor
5440: 74 20 74 65 6d 70 6c 61 74 65 2d 73 65 74 2d 63  t template-set-c
5450: 6f 6c 6f 72 73 5d 0a 0a 09 70 72 69 76 61 74 65  olors]...private
5460: 20 74 65 6d 70 6c 61 74 65 2d 73 70 65 63 20 7b   template-spec {
5470: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 52 65  ..    section Re
5480: 70 6f 72 74 69 6e 67 0a 09 20 20 20 20 64 65 73  porting..    des
5490: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 53 65 74  cription {...Set
54a0: 20 74 68 65 20 67 6c 6f 62 61 6c 20 73 71 6c 20   the global sql 
54b0: 74 65 6d 70 6c 61 74 65 0a 09 20 20 20 20 7d 0a  template..    }.
54c0: 09 20 20 20 20 75 73 65 20 2e 73 70 65 63 0a 09  .    use .spec..
54d0: 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 72 65 70 6f  } [fx::call repo
54e0: 72 74 20 74 65 6d 70 6c 61 74 65 2d 73 65 74 2d  rt template-set-
54f0: 73 71 6c 5d 0a 20 20 20 20 7d 0a 20 20 20 20 61  sql].    }.    a
5500: 6c 69 61 73 20 72 65 70 6f 72 74 73 20 3d 20 72  lias reports = r
5510: 65 70 6f 72 74 20 6c 69 73 74 0a 0a 20 20 20 20  eport list..    
5520: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
5530: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
5540: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
5550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20  ##############. 
5560: 20 20 20 23 23 20 4d 61 6e 61 67 65 6d 65 6e 74     ## Management
5570: 20 6f 66 20 6d 61 70 70 69 6e 67 73 20 28 75 73   of mappings (us
5580: 65 64 20 62 6f 74 68 20 69 6e 74 65 72 6e 61 6c  ed both internal
5590: 6c 79 20 61 6e 64 20 62 79 20 74 68 65 0a 20 20  ly and by the.  
55a0: 20 20 23 23 20 74 69 63 6b 65 74 20 73 79 73 74    ## ticket syst
55b0: 65 6d 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e  em, for example.
55c0: 20 54 79 70 65 2c 20 73 65 76 65 72 69 74 79 2c   Type, severity,
55d0: 20 70 72 69 6f 72 69 74 79 2c 20 63 61 74 65 67   priority, categ
55e0: 6f 72 79 2c 0a 20 20 20 20 23 23 20 2e 2e 2e 29  ory,.    ## ...)
55f0: 0a 0a 20 20 20 20 6f 66 66 69 63 65 72 20 6d 61  ..    officer ma
5600: 70 20 7b 0a 09 64 65 73 63 72 69 70 74 69 6f 6e  p {..description
5610: 20 7b 0a 09 20 20 20 20 4d 61 6e 61 67 65 6d 65   {..    Manageme
5620: 6e 74 20 6f 66 20 6d 61 70 70 69 6e 67 73 20 66  nt of mappings f
5630: 6f 72 20 74 68 65 20 74 69 63 6b 65 74 69 6e 67  or the ticketing
5640: 20 73 79 73 74 65 6d 20 61 6e 64 20 6f 74 68 65   system and othe
5650: 72 0a 09 20 20 20 20 74 68 69 6e 67 73 2e 0a 09  r..    things...
5660: 7d 0a 0a 09 63 6f 6d 6d 6f 6e 20 2a 61 6c 6c 2a  }...common *all*
5670: 20 2d 65 78 74 65 6e 64 20 7b 0a 09 20 20 20 20   -extend {..    
5680: 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a  use .repository.
5690: 09 7d 0a 0a 09 63 6f 6d 6d 6f 6e 20 2e 6d 61 70  .}...common .map
56a0: 20 7b 0a 09 20 20 20 20 69 6e 70 75 74 20 6d 61   {..    input ma
56b0: 70 20 7b 0a 09 09 4e 61 6d 65 20 6f 66 20 74 68  p {...Name of th
56c0: 65 20 6d 61 70 70 69 6e 67 20 74 6f 20 6f 70 65  e mapping to ope
56d0: 72 61 74 65 20 6f 6e 2e 0a 09 20 20 20 20 7d 20  rate on...    } 
56e0: 7b 0a 09 09 76 61 6c 69 64 61 74 65 20 5b 66 78  {...validate [fx
56f0: 3a 3a 76 74 20 6d 61 70 5d 0a 09 20 20 20 20 7d  ::vt map]..    }
5700: 0a 09 7d 0a 0a 09 70 72 69 76 61 74 65 20 6c 69  ..}...private li
5710: 73 74 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f  st {..    sectio
5720: 6e 20 4d 61 70 70 69 6e 67 73 0a 09 20 20 20 20  n Mappings..    
5730: 73 65 63 74 69 6f 6e 20 49 6e 74 72 6f 73 70 65  section Introspe
5740: 63 74 69 6f 6e 0a 09 20 20 20 20 64 65 73 63 72  ction..    descr
5750: 69 70 74 69 6f 6e 20 7b 0a 09 09 4c 69 73 74 20  iption {...List 
5760: 61 6c 6c 20 6d 61 70 70 69 6e 67 73 20 73 74 6f  all mappings sto
5770: 72 65 64 20 69 6e 20 74 68 65 20 72 65 70 6f 73  red in the repos
5780: 69 74 6f 72 79 2e 0a 09 20 20 20 20 7d 0a 09 7d  itory...    }..}
5790: 20 5b 66 78 3a 3a 63 61 6c 6c 20 6d 61 70 20 6c   [fx::call map l
57a0: 69 73 74 5d 0a 09 64 65 66 61 75 6c 74 0a 0a 09  ist]..default...
57b0: 70 72 69 76 61 74 65 20 63 72 65 61 74 65 20 7b  private create {
57c0: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 4d 61  ..    section Ma
57d0: 70 70 69 6e 67 73 20 43 6f 6e 74 72 6f 6c 0a 09  ppings Control..
57e0: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20      description 
57f0: 7b 0a 09 09 43 72 65 61 74 65 20 61 20 6e 65 77  {...Create a new
5800: 20 6e 61 6d 65 64 20 6d 61 70 70 69 6e 67 2e 0a   named mapping..
5810: 09 20 20 20 20 7d 0a 09 20 20 20 20 69 6e 70 75  .    }..    inpu
5820: 74 20 6e 65 77 6d 61 70 20 7b 0a 09 09 4e 61 6d  t newmap {...Nam
5830: 65 20 6f 66 20 74 68 65 20 6d 61 70 70 69 6e 67  e of the mapping
5840: 20 74 6f 20 63 72 65 61 74 65 2e 0a 09 20 20 20   to create...   
5850: 20 7d 20 7b 0a 09 09 76 61 6c 69 64 61 74 65 20   } {...validate 
5860: 5b 66 78 3a 3a 76 74 20 6e 6f 74 2d 6d 61 70 5d  [fx::vt not-map]
5870: 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a  ..    }..} [fx::
5880: 63 61 6c 6c 20 6d 61 70 20 63 72 65 61 74 65 5d  call map create]
5890: 0a 0a 09 70 72 69 76 61 74 65 20 64 65 6c 65 74  ...private delet
58a0: 65 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e  e {..    section
58b0: 20 4d 61 70 70 69 6e 67 73 20 43 6f 6e 74 72 6f   Mappings Contro
58c0: 6c 0a 09 20 20 20 20 64 65 73 63 72 69 70 74 69  l..    descripti
58d0: 6f 6e 20 7b 0a 09 09 44 65 6c 65 74 65 20 74 68  on {...Delete th
58e0: 65 20 6e 61 6d 65 64 20 6d 61 70 70 69 6e 67 2e  e named mapping.
58f0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65  ..    }..    use
5900: 20 2e 6d 61 70 0a 09 7d 20 5b 66 78 3a 3a 63 61   .map..} [fx::ca
5910: 6c 6c 20 6d 61 70 20 64 65 6c 65 74 65 5d 0a 0a  ll map delete]..
5920: 09 70 72 69 76 61 74 65 20 72 65 6e 61 6d 65 20  .private rename 
5930: 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 4d  {..    section M
5940: 61 70 70 69 6e 67 73 20 43 6f 6e 74 72 6f 6c 0a  appings Control.
5950: 09 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e  .    description
5960: 20 7b 0a 09 09 52 65 6e 61 6d 65 20 74 68 65 20   {...Rename the 
5970: 6e 61 6d 65 64 20 6d 61 70 70 69 6e 67 2e 0a 09  named mapping...
5980: 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e      }..    use .
5990: 6d 61 70 0a 09 20 20 20 20 69 6e 70 75 74 20 6e  map..    input n
59a0: 65 77 6d 61 70 20 7b 0a 09 09 4e 65 77 20 6e 61  ewmap {...New na
59b0: 6d 65 20 66 6f 72 20 74 68 65 20 6d 61 70 70 69  me for the mappi
59c0: 6e 67 0a 09 20 20 20 20 7d 20 7b 0a 09 09 76 61  ng..    } {...va
59d0: 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 6e  lidate [fx::vt n
59e0: 6f 74 2d 6d 61 70 5d 0a 09 20 20 20 20 7d 0a 09  ot-map]..    }..
59f0: 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 6d 61 70 20  } [fx::call map 
5a00: 72 65 6e 61 6d 65 5d 0a 0a 09 70 72 69 76 61 74  rename]...privat
5a10: 65 20 65 78 70 6f 72 74 20 7b 0a 09 20 20 20 20  e export {..    
5a20: 73 65 63 74 69 6f 6e 20 4d 61 70 70 69 6e 67 73  section Mappings
5a30: 20 53 61 76 65 2f 52 65 73 74 6f 72 65 0a 09 20   Save/Restore.. 
5a40: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
5a50: 0a 09 09 53 61 76 65 20 74 68 65 20 73 70 65 63  ...Save the spec
5a60: 69 66 69 65 64 20 6d 61 70 70 69 6e 67 28 73 29  ified mapping(s)
5a70: 2e 0a 09 09 44 65 66 61 75 6c 74 73 20 74 6f 20  ....Defaults to 
5a80: 61 6c 6c 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20  all...    }..   
5a90: 20 75 73 65 20 2e 65 78 70 6f 72 74 0a 09 20 20   use .export..  
5aa0: 20 20 69 6e 70 75 74 20 6d 61 70 73 20 7b 0a 09    input maps {..
5ab0: 09 4e 61 6d 65 73 20 6f 66 20 74 68 65 20 6d 61  .Names of the ma
5ac0: 70 70 69 6e 67 73 20 74 6f 20 65 78 70 6f 72 74  ppings to export
5ad0: 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09 6f 70 74  ...    } {...opt
5ae0: 69 6f 6e 61 6c 0a 09 09 6c 69 73 74 0a 09 09 76  ional...list...v
5af0: 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74 20  alidate [fx::vt 
5b00: 6d 61 70 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 5b  map]..    }..} [
5b10: 66 78 3a 3a 63 61 6c 6c 20 6d 61 70 20 65 78 70  fx::call map exp
5b20: 6f 72 74 5d 0a 0a 09 70 72 69 76 61 74 65 20 69  ort]...private i
5b30: 6d 70 6f 72 74 20 7b 0a 09 20 20 20 20 73 65 63  mport {..    sec
5b40: 74 69 6f 6e 20 4d 61 70 70 69 6e 67 73 20 53 61  tion Mappings Sa
5b50: 76 65 2f 52 65 73 74 6f 72 65 0a 09 20 20 20 20  ve/Restore..    
5b60: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09  description {...
5b70: 49 6d 70 6f 72 74 20 6f 6e 65 20 6f 72 20 6d 6f  Import one or mo
5b80: 72 65 20 6d 61 70 70 69 6e 67 73 20 66 72 6f 6d  re mappings from
5b90: 20 61 20 73 61 76 65 20 66 69 6c 65 2e 0a 09 20   a save file... 
5ba0: 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 65     }..    use .e
5bb0: 78 74 65 6e 64 0a 09 20 20 20 20 75 73 65 20 2e  xtend..    use .
5bc0: 69 6d 70 6f 72 74 0a 09 7d 20 5b 66 78 3a 3a 63  import..} [fx::c
5bd0: 61 6c 6c 20 6d 61 70 20 69 6d 70 6f 72 74 5d 0a  all map import].
5be0: 0a 09 70 72 69 76 61 74 65 20 61 64 64 20 7b 0a  ..private add {.
5bf0: 09 20 20 20 20 73 65 63 74 69 6f 6e 20 4d 61 70  .    section Map
5c00: 70 69 6e 67 73 20 43 6f 6e 74 72 6f 6c 0a 09 20  pings Control.. 
5c10: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
5c20: 0a 09 09 45 78 74 65 6e 64 20 74 68 65 20 73 70  ...Extend the sp
5c30: 65 63 69 66 69 65 64 20 6d 61 70 70 69 6e 67 20  ecified mapping 
5c40: 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 6b  with the given k
5c50: 65 79 20 61 6e 64 20 76 61 6c 75 65 2e 0a 09 20  ey and value... 
5c60: 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 6d     }..    use .m
5c70: 61 70 0a 09 20 20 20 20 69 6e 70 75 74 20 6b 65  ap..    input ke
5c80: 79 20 7b 0a 09 09 41 64 64 69 74 69 6f 6e 61 6c  y {...Additional
5c90: 20 6b 65 79 20 6f 66 20 74 68 65 20 6d 61 70 70   key of the mapp
5ca0: 69 6e 67 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09  ing...    } {...
5cb0: 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74  validate [fx::vt
5cc0: 20 6e 6f 74 2d 6d 61 70 2d 6b 65 79 5d 0a 09 20   not-map-key].. 
5cd0: 20 20 20 7d 0a 09 20 20 20 20 69 6e 70 75 74 20     }..    input 
5ce0: 76 61 6c 75 65 20 7b 0a 09 09 56 61 6c 75 65 20  value {...Value 
5cf0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
5d00: 74 68 65 20 6b 65 79 0a 09 20 20 20 20 7d 20 7b  the key..    } {
5d10: 0a 09 09 76 61 6c 69 64 61 74 65 20 73 74 72 0a  ...validate str.
5d20: 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63  .    }..} [fx::c
5d30: 61 6c 6c 20 6d 61 70 20 61 64 64 5d 0a 0a 09 70  all map add]...p
5d40: 72 69 76 61 74 65 20 72 65 6d 6f 76 65 20 7b 0a  rivate remove {.
5d50: 09 20 20 20 20 73 65 63 74 69 6f 6e 20 4d 61 70  .    section Map
5d60: 70 69 6e 67 73 20 43 6f 6e 74 72 6f 6c 0a 09 20  pings Control.. 
5d70: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
5d80: 0a 09 09 52 65 6d 6f 76 65 20 74 68 65 20 6e 61  ...Remove the na
5d90: 6d 65 64 20 6b 65 79 73 28 73 29 20 66 72 6f 6d  med keys(s) from
5da0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d   the specified m
5db0: 61 70 70 69 6e 67 2e 0a 09 20 20 20 20 7d 0a 09  apping...    }..
5dc0: 20 20 20 20 75 73 65 20 2e 6d 61 70 0a 09 20 20      use .map..  
5dd0: 20 20 69 6e 70 75 74 20 69 74 65 6d 73 20 7b 0a    input items {.
5de0: 09 09 4b 65 79 73 20 6f 66 20 74 68 65 20 6d 61  ..Keys of the ma
5df0: 70 70 69 6e 67 20 74 6f 20 72 65 6d 6f 76 65 2e  pping to remove.
5e00: 0a 09 20 20 20 20 7d 20 7b 0a 09 09 6c 69 73 74  ..    } {...list
5e10: 0a 09 09 76 61 6c 69 64 61 74 65 20 5b 66 78 3a  ...validate [fx:
5e20: 3a 76 74 20 6d 61 70 2d 6b 65 79 5d 0a 09 20 20  :vt map-key]..  
5e30: 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c    }..} [fx::call
5e40: 20 6d 61 70 20 72 65 6d 6f 76 65 5d 0a 0a 09 70   map remove]...p
5e50: 72 69 76 61 74 65 20 73 68 6f 77 20 7b 0a 09 20  rivate show {.. 
5e60: 20 20 20 73 65 63 74 69 6f 6e 20 4d 61 70 70 69     section Mappi
5e70: 6e 67 73 0a 09 20 20 20 20 73 65 63 74 69 6f 6e  ngs..    section
5e80: 20 49 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 09   Introspection..
5e90: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20      description 
5ea0: 7b 0a 09 09 53 68 6f 77 20 74 68 65 20 6b 65 79  {...Show the key
5eb0: 2f 76 61 6c 75 65 20 70 61 69 72 73 20 6f 66 20  /value pairs of 
5ec0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 61  the specified ma
5ed0: 70 70 69 6e 67 2e 0a 09 20 20 20 20 7d 0a 09 20  pping...    }.. 
5ee0: 20 20 20 75 73 65 20 2e 6d 61 70 0a 09 7d 20 5b     use .map..} [
5ef0: 66 78 3a 3a 63 61 6c 6c 20 6d 61 70 20 73 68 6f  fx::call map sho
5f00: 77 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 6c  w].    }..    al
5f10: 69 61 73 20 6d 61 70 73 20 3d 20 6d 61 70 20 6c  ias maps = map l
5f20: 69 73 74 0a 0a 20 20 20 20 23 20 23 20 23 23 20  ist..    # # ## 
5f30: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
5f40: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
5f50: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
5f60: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d  #######.    ## M
5f70: 61 6e 61 67 65 6d 65 6e 74 20 6f 66 20 65 6e 75  anagement of enu
5f80: 6d 65 72 61 74 69 6f 6e 73 20 28 75 73 65 64 20  merations (used 
5f90: 62 6f 74 68 20 69 6e 74 65 72 6e 61 6c 6c 79 20  both internally 
5fa0: 61 6e 64 20 62 79 20 74 68 65 0a 20 20 20 20 23  and by the.    #
5fb0: 23 20 74 69 63 6b 65 74 20 73 79 73 74 65 6d 2c  # ticket system,
5fc0: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2e 20 54 79   for example. Ty
5fd0: 70 65 2c 20 73 65 76 65 72 69 74 79 2c 20 70 72  pe, severity, pr
5fe0: 69 6f 72 69 74 79 2c 20 63 61 74 65 67 6f 72 79  iority, category
5ff0: 2c 0a 20 20 20 20 23 23 20 2e 2e 2e 29 0a 0a 20  ,.    ## ...).. 
6000: 20 20 20 6f 66 66 69 63 65 72 20 65 6e 75 6d 20     officer enum 
6010: 7b 0a 09 64 65 73 63 72 69 70 74 69 6f 6e 20 7b  {..description {
6020: 0a 09 20 20 20 20 4d 61 6e 61 67 65 6d 65 6e 74  ..    Management
6030: 20 6f 66 20 65 6e 75 6d 65 72 61 74 69 6f 6e 73   of enumerations
6040: 20 66 6f 72 20 74 68 65 20 74 69 63 6b 65 74 69   for the ticketi
6050: 6e 67 20 73 79 73 74 65 6d 2e 0a 09 7d 0a 0a 09  ng system...}...
6060: 63 6f 6d 6d 6f 6e 20 2a 61 6c 6c 2a 20 2d 65 78  common *all* -ex
6070: 74 65 6e 64 20 7b 0a 09 20 20 20 20 75 73 65 20  tend {..    use 
6080: 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09 7d 0a 0a  .repository..}..
6090: 09 63 6f 6d 6d 6f 6e 20 2e 65 6e 75 6d 20 7b 0a  .common .enum {.
60a0: 09 20 20 20 20 69 6e 70 75 74 20 65 6e 75 6d 20  .    input enum 
60b0: 7b 0a 09 09 4e 61 6d 65 20 6f 66 20 74 68 65 20  {...Name of the 
60c0: 65 6e 75 6d 65 72 61 74 69 6f 6e 20 74 6f 20 6f  enumeration to o
60d0: 70 65 72 61 74 65 20 6f 6e 2e 0a 09 20 20 20 20  perate on...    
60e0: 7d 20 7b 0a 09 09 76 61 6c 69 64 61 74 65 20 5b  } {...validate [
60f0: 66 78 3a 3a 76 74 20 65 6e 75 6d 5d 0a 09 20 20  fx::vt enum]..  
6100: 20 20 7d 0a 09 7d 0a 0a 09 70 72 69 76 61 74 65    }..}...private
6110: 20 6c 69 73 74 20 7b 0a 09 20 20 20 20 73 65 63   list {..    sec
6120: 74 69 6f 6e 20 45 6e 75 6d 65 72 61 74 69 6f 6e  tion Enumeration
6130: 73 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 49  s..    section I
6140: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 09 20 20  ntrospection..  
6150: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a    description {.
6160: 09 09 4c 69 73 74 20 61 6c 6c 20 65 6e 75 6d 65  ..List all enume
6170: 72 61 74 69 6f 6e 73 20 73 74 6f 72 65 64 20 69  rations stored i
6180: 6e 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79  n the repository
6190: 2e 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a  ...    }..} [fx:
61a0: 3a 63 61 6c 6c 20 65 6e 75 6d 20 6c 69 73 74 5d  :call enum list]
61b0: 0a 09 64 65 66 61 75 6c 74 0a 0a 09 70 72 69 76  ..default...priv
61c0: 61 74 65 20 63 72 65 61 74 65 20 7b 0a 09 20 20  ate create {..  
61d0: 20 20 73 65 63 74 69 6f 6e 20 45 6e 75 6d 65 72    section Enumer
61e0: 61 74 69 6f 6e 73 20 43 6f 6e 74 72 6f 6c 0a 09  ations Control..
61f0: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20      description 
6200: 7b 0a 09 09 43 72 65 61 74 65 20 61 20 6e 65 77  {...Create a new
6210: 20 6e 61 6d 65 64 20 65 6e 75 6d 65 72 61 74 69   named enumerati
6220: 6f 6e 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  on...    }..    
6230: 69 6e 70 75 74 20 6e 65 77 65 6e 75 6d 20 7b 0a  input newenum {.
6240: 09 09 4e 61 6d 65 20 6f 66 20 74 68 65 20 65 6e  ..Name of the en
6250: 75 6d 65 72 61 74 69 6f 6e 20 74 6f 20 63 72 65  umeration to cre
6260: 61 74 65 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09  ate...    } {...
6270: 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74  validate [fx::vt
6280: 20 6e 6f 74 2d 65 6e 75 6d 5d 0a 09 20 20 20 20   not-enum]..    
6290: 7d 0a 09 20 20 20 20 69 6e 70 75 74 20 69 74 65  }..    input ite
62a0: 6d 73 20 7b 0a 09 09 49 6e 69 74 69 61 6c 20 69  ms {...Initial i
62b0: 74 65 6d 73 20 6f 66 20 74 68 65 20 6e 65 77 20  tems of the new 
62c0: 65 6e 75 6d 65 72 61 74 69 6f 6e 2e 0a 09 20 20  enumeration...  
62d0: 20 20 7d 20 7b 0a 09 09 6f 70 74 69 6f 6e 61 6c    } {...optional
62e0: 0a 09 09 6c 69 73 74 0a 09 09 76 61 6c 69 64 61  ...list...valida
62f0: 74 65 20 73 74 72 0a 09 20 20 20 20 7d 0a 09 7d  te str..    }..}
6300: 20 5b 66 78 3a 3a 63 61 6c 6c 20 65 6e 75 6d 20   [fx::call enum 
6310: 63 72 65 61 74 65 5d 0a 0a 09 70 72 69 76 61 74  create]...privat
6320: 65 20 64 65 6c 65 74 65 20 7b 0a 09 20 20 20 20  e delete {..    
6330: 73 65 63 74 69 6f 6e 20 45 6e 75 6d 65 72 61 74  section Enumerat
6340: 69 6f 6e 73 20 43 6f 6e 74 72 6f 6c 0a 09 20 20  ions Control..  
6350: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a    description {.
6360: 09 09 44 65 6c 65 74 65 20 74 68 65 20 6e 61 6d  ..Delete the nam
6370: 65 64 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e 20  ed enumeration. 
6380: 43 61 72 65 66 75 6c 2c 20 79 6f 75 20 6d 61 79  Careful, you may
6390: 20 62 72 65 61 6b 20 79 6f 75 72 0a 09 09 74 69   break your...ti
63a0: 63 6b 65 74 69 6e 67 20 73 79 73 74 65 6d 2e 20  cketing system. 
63b0: 43 68 65 63 6b 20 66 69 72 73 74 20 74 68 61 74  Check first that
63c0: 20 74 68 65 20 65 6e 75 6d 65 72 61 74 69 6f 6e   the enumeration
63d0: 20 69 73 20 6e 6f 74 0a 09 09 75 73 65 64 20 61   is not...used a
63e0: 6e 79 6d 6f 72 65 2e 0a 09 20 20 20 20 7d 0a 09  nymore...    }..
63f0: 20 20 20 20 75 73 65 20 2e 65 6e 75 6d 0a 09 7d      use .enum..}
6400: 20 5b 66 78 3a 3a 63 61 6c 6c 20 65 6e 75 6d 20   [fx::call enum 
6410: 64 65 6c 65 74 65 5d 0a 0a 09 70 72 69 76 61 74  delete]...privat
6420: 65 20 72 65 6e 61 6d 65 20 7b 0a 09 20 20 20 20  e rename {..    
6430: 73 65 63 74 69 6f 6e 20 45 6e 75 6d 65 72 61 74  section Enumerat
6440: 69 6f 6e 73 20 43 6f 6e 74 72 6f 6c 0a 09 20 20  ions Control..  
6450: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a    description {.
6460: 09 09 52 65 6e 61 6d 65 20 74 68 65 20 6e 61 6d  ..Rename the nam
6470: 65 64 20 65 6e 75 6d 65 72 61 74 69 6f 6e 2e 0a  ed enumeration..
6480: 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20  .    }..    use 
6490: 2e 65 6e 75 6d 0a 09 20 20 20 20 69 6e 70 75 74  .enum..    input
64a0: 20 6e 65 77 65 6e 75 6d 20 7b 0a 09 09 4e 65 77   newenum {...New
64b0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 65 6e   name for the en
64c0: 75 6d 65 72 61 74 69 6f 6e 2e 0a 09 20 20 20 20  umeration...    
64d0: 7d 20 7b 0a 09 09 76 61 6c 69 64 61 74 65 20 5b  } {...validate [
64e0: 66 78 3a 3a 76 74 20 6e 6f 74 2d 65 6e 75 6d 5d  fx::vt not-enum]
64f0: 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a  ..    }..} [fx::
6500: 63 61 6c 6c 20 65 6e 75 6d 20 72 65 6e 61 6d 65  call enum rename
6510: 5d 0a 0a 09 70 72 69 76 61 74 65 20 65 78 70 6f  ]...private expo
6520: 72 74 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f  rt {..    sectio
6530: 6e 20 45 6e 75 6d 65 72 61 74 69 6f 6e 73 20 53  n Enumerations S
6540: 61 76 65 2f 52 65 73 74 6f 72 65 0a 09 20 20 20  ave/Restore..   
6550: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
6560: 09 53 61 76 65 20 74 68 65 20 73 70 65 63 69 66  .Save the specif
6570: 69 65 64 20 65 6e 75 6d 65 72 61 74 69 6f 6e 28  ied enumeration(
6580: 73 29 2e 0a 09 09 44 65 66 61 75 6c 74 73 20 74  s)....Defaults t
6590: 6f 20 61 6c 6c 2e 0a 09 20 20 20 20 7d 0a 09 20  o all...    }.. 
65a0: 20 20 20 75 73 65 20 2e 65 78 70 6f 72 74 0a 09     use .export..
65b0: 20 20 20 20 69 6e 70 75 74 20 65 6e 75 6d 73 20      input enums 
65c0: 7b 0a 09 09 4e 61 6d 65 73 20 6f 66 20 74 68 65  {...Names of the
65d0: 20 65 6e 75 6d 65 72 61 74 69 6f 6e 73 20 74 6f   enumerations to
65e0: 20 65 78 70 6f 72 74 2e 0a 09 20 20 20 20 7d 20   export...    } 
65f0: 7b 0a 09 09 6f 70 74 69 6f 6e 61 6c 0a 09 09 6c  {...optional...l
6600: 69 73 74 0a 09 09 76 61 6c 69 64 61 74 65 20 5b  ist...validate [
6610: 66 78 3a 3a 76 74 20 65 6e 75 6d 5d 0a 09 09 23  fx::vt enum]...#
6620: 67 65 6e 65 72 61 74 65 20 5b 66 78 3a 3a 76 74  generate [fx::vt
6630: 20 65 6e 75 6d 20 64 65 66 61 75 6c 74 5d 0a 09   enum default]..
6640: 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63 61      }..} [fx::ca
6650: 6c 6c 20 65 6e 75 6d 20 65 78 70 6f 72 74 5d 0a  ll enum export].
6660: 0a 09 70 72 69 76 61 74 65 20 69 6d 70 6f 72 74  ..private import
6670: 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20   {..    section 
6680: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 20 53 61 76  Enumerations Sav
6690: 65 2f 52 65 73 74 6f 72 65 0a 09 20 20 20 20 64  e/Restore..    d
66a0: 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 49  escription {...I
66b0: 6d 70 6f 72 74 20 6f 6e 65 20 6f 72 20 6d 6f 72  mport one or mor
66c0: 65 20 65 6e 75 6d 65 72 61 74 69 6f 6e 73 20 66  e enumerations f
66d0: 72 6f 6d 20 61 20 73 61 76 65 20 66 69 6c 65 2e  rom a save file.
66e0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65  ..    }..    use
66f0: 20 2e 65 78 74 65 6e 64 0a 09 20 20 20 20 75 73   .extend..    us
6700: 65 20 2e 69 6d 70 6f 72 74 0a 09 7d 20 5b 66 78  e .import..} [fx
6710: 3a 3a 63 61 6c 6c 20 65 6e 75 6d 20 69 6d 70 6f  ::call enum impo
6720: 72 74 5d 0a 0a 09 70 72 69 76 61 74 65 20 61 64  rt]...private ad
6730: 64 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e  d {..    section
6740: 20 45 6e 75 6d 65 72 61 74 69 6f 6e 73 20 43 6f   Enumerations Co
6750: 6e 74 72 6f 6c 0a 09 20 20 20 20 64 65 73 63 72  ntrol..    descr
6760: 69 70 74 69 6f 6e 20 7b 0a 09 09 45 78 74 65 6e  iption {...Exten
6770: 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  d the specified 
6780: 65 6e 75 6d 65 72 61 74 69 6f 6e 20 77 69 74 68  enumeration with
6790: 20 74 68 65 20 67 69 76 65 6e 20 69 74 65 6d 73   the given items
67a0: 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73  ...    }..    us
67b0: 65 20 2e 65 6e 75 6d 0a 09 20 20 20 20 69 6e 70  e .enum..    inp
67c0: 75 74 20 69 74 65 6d 73 20 7b 0a 09 09 41 64 64  ut items {...Add
67d0: 69 74 69 6f 6e 61 6c 20 69 74 65 6d 73 20 6f 66  itional items of
67e0: 20 74 68 65 20 65 6e 75 6d 65 72 61 74 69 6f 6e   the enumeration
67f0: 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09 6c 69 73  ...    } {...lis
6800: 74 0a 09 09 76 61 6c 69 64 61 74 65 20 5b 66 78  t...validate [fx
6810: 3a 3a 76 74 20 6e 6f 74 2d 65 6e 75 6d 2d 69 74  ::vt not-enum-it
6820: 65 6d 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66  em]..    }..} [f
6830: 78 3a 3a 63 61 6c 6c 20 65 6e 75 6d 20 61 64 64  x::call enum add
6840: 5d 0a 0a 09 70 72 69 76 61 74 65 20 72 65 6d 6f  ]...private remo
6850: 76 65 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f  ve {..    sectio
6860: 6e 20 45 6e 75 6d 65 72 61 74 69 6f 6e 73 20 43  n Enumerations C
6870: 6f 6e 74 72 6f 6c 0a 09 20 20 20 20 64 65 73 63  ontrol..    desc
6880: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 52 65 6d 6f  ription {...Remo
6890: 76 65 20 74 68 65 20 6e 61 6d 65 64 20 69 74 65  ve the named ite
68a0: 6d 28 73 29 20 66 72 6f 6d 20 74 68 65 20 73 70  m(s) from the sp
68b0: 65 63 69 66 69 65 64 20 65 6e 75 6d 65 72 61 74  ecified enumerat
68c0: 69 6f 6e 2e 0a 09 09 43 61 72 65 66 75 6c 2c 20  ion....Careful, 
68d0: 79 6f 75 20 6d 61 79 20 62 72 65 61 6b 20 79 6f  you may break yo
68e0: 75 72 20 74 69 63 6b 65 74 69 6e 67 20 73 79 73  ur ticketing sys
68f0: 74 65 6d 2e 20 43 68 65 63 6b 0a 09 09 66 69 72  tem. Check...fir
6900: 73 74 20 74 68 61 74 20 74 68 65 20 69 74 65 6d  st that the item
6910: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 6e 79   is not used any
6920: 6d 6f 72 65 2e 0a 09 20 20 20 20 7d 0a 09 20 20  more...    }..  
6930: 20 20 75 73 65 20 2e 65 6e 75 6d 0a 09 20 20 20    use .enum..   
6940: 20 69 6e 70 75 74 20 69 74 65 6d 73 20 7b 0a 09   input items {..
6950: 09 49 74 65 6d 73 20 6f 66 20 74 68 65 20 65 6e  .Items of the en
6960: 75 6d 65 72 61 74 69 6f 6e 20 74 6f 20 72 65 6d  umeration to rem
6970: 6f 76 65 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09  ove...    } {...
6980: 6c 69 73 74 0a 09 09 76 61 6c 69 64 61 74 65 20  list...validate 
6990: 5b 66 78 3a 3a 76 74 20 65 6e 75 6d 2d 69 74 65  [fx::vt enum-ite
69a0: 6d 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78  m]..    }..} [fx
69b0: 3a 3a 63 61 6c 6c 20 65 6e 75 6d 20 72 65 6d 6f  ::call enum remo
69c0: 76 65 5d 0a 0a 09 70 72 69 76 61 74 65 20 63 68  ve]...private ch
69d0: 61 6e 67 65 20 7b 0a 09 20 20 20 20 73 65 63 74  ange {..    sect
69e0: 69 6f 6e 20 45 6e 75 6d 65 72 61 74 69 6f 6e 73  ion Enumerations
69f0: 20 43 6f 6e 74 72 6f 6c 0a 09 20 20 20 20 64 65   Control..    de
6a00: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 52 65  scription {...Re
6a10: 6e 61 6d 65 20 74 68 65 20 69 74 65 6d 20 69 6e  name the item in
6a20: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
6a30: 6e 75 6d 65 72 61 74 69 6f 6e 2e 0a 09 09 43 61  numeration....Ca
6a40: 72 65 66 75 6c 2c 20 79 6f 75 20 6d 61 79 20 62  reful, you may b
6a50: 72 65 61 6b 20 79 6f 75 72 20 74 69 63 6b 65 74  reak your ticket
6a60: 69 6e 67 20 73 79 73 74 65 6d 2e 20 43 68 65 63  ing system. Chec
6a70: 6b 0a 09 09 66 69 72 73 74 20 74 68 61 74 20 61  k...first that a
6a80: 6c 6c 20 75 73 65 72 73 20 68 61 76 65 20 6d 61  ll users have ma
6a90: 64 65 20 74 68 65 20 73 61 6d 65 20 73 75 62 73  de the same subs
6aa0: 74 69 74 75 74 69 6f 6e 2e 0a 09 20 20 20 20 7d  titution...    }
6ab0: 0a 09 20 20 20 20 75 73 65 20 2e 65 6e 75 6d 0a  ..    use .enum.
6ac0: 09 20 20 20 20 69 6e 70 75 74 20 69 74 65 6d 20  .    input item 
6ad0: 7b 0a 09 09 49 74 65 6d 20 6f 66 20 74 68 65 20  {...Item of the 
6ae0: 65 6e 75 6d 65 72 61 74 69 6f 6e 20 74 6f 20 63  enumeration to c
6af0: 68 61 6e 67 65 2e 0a 09 20 20 20 20 7d 20 7b 0a  hange...    } {.
6b00: 09 09 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a  ..validate [fx::
6b10: 76 74 20 65 6e 75 6d 2d 69 74 65 6d 5d 0a 09 20  vt enum-item].. 
6b20: 20 20 20 7d 0a 09 20 20 20 20 69 6e 70 75 74 20     }..    input 
6b30: 6e 65 77 69 74 65 6d 20 7b 0a 09 09 4e 65 77 20  newitem {...New 
6b40: 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 74 65 6d  name of the item
6b50: 20 69 6e 20 74 68 65 20 65 6e 75 6d 65 72 61 74   in the enumerat
6b60: 69 6f 6e 2e 0a 09 20 20 20 20 7d 20 7b 0a 09 09  ion...    } {...
6b70: 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74  validate [fx::vt
6b80: 20 6e 6f 74 2d 65 6e 75 6d 2d 69 74 65 6d 5d 0a   not-enum-item].
6b90: 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63  .    }..} [fx::c
6ba0: 61 6c 6c 20 65 6e 75 6d 20 63 68 61 6e 67 65 5d  all enum change]
6bb0: 0a 0a 09 70 72 69 76 61 74 65 20 69 74 65 6d 73  ...private items
6bc0: 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20   {..    section 
6bd0: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0a 09 20 20  Enumerations..  
6be0: 20 20 73 65 63 74 69 6f 6e 20 49 6e 74 72 6f 73    section Intros
6bf0: 70 65 63 74 69 6f 6e 0a 09 20 20 20 20 64 65 73  pection..    des
6c00: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 53 68 6f  cription {...Sho
6c10: 77 20 74 68 65 20 69 74 65 6d 73 20 69 6e 20 74  w the items in t
6c20: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 75  he specified enu
6c30: 6d 65 72 61 74 69 6f 6e 2e 0a 09 20 20 20 20 7d  meration...    }
6c40: 0a 09 20 20 20 20 75 73 65 20 2e 65 6e 75 6d 0a  ..    use .enum.
6c50: 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 65 6e 75  .} [fx::call enu
6c60: 6d 20 69 74 65 6d 73 5d 0a 20 20 20 20 7d 0a 0a  m items].    }..
6c70: 20 20 20 20 61 6c 69 61 73 20 65 6e 75 6d 73 20      alias enums 
6c80: 3d 20 65 6e 75 6d 20 6c 69 73 74 0a 0a 20 20 20  = enum list..   
6c90: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
6ca0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
6cb0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
6cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
6cd0: 20 20 20 20 23 23 20 43 68 61 6e 67 65 20 6e 6f      ## Change no
6ce0: 74 69 66 69 63 61 74 69 6f 6e 73 2c 20 6d 61 6e  tifications, man
6cf0: 61 67 65 6d 65 6e 74 20 61 6e 64 20 67 65 6e 65  agement and gene
6d00: 72 61 74 69 6f 6e 2e 0a 0a 20 20 20 20 6f 66 66  ration...    off
6d10: 69 63 65 72 20 6e 6f 74 65 20 7b 0a 09 64 65 73  icer note {..des
6d20: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 20 20 20 20  cription {..    
6d30: 4d 61 6e 61 67 65 6d 65 6e 74 20 6f 66 20 6e 6f  Management of no
6d40: 74 69 66 69 63 61 74 69 6f 6e 20 65 6d 61 69 6c  tification email
6d50: 73 20 66 6f 72 20 74 69 63 6b 65 74 0a 09 20 20  s for ticket..  
6d60: 20 20 63 68 61 6e 67 65 73 2c 20 6e 65 77 20 72    changes, new r
6d70: 65 76 69 73 69 6f 6e 73 2c 20 65 74 63 2e 0a 09  evisions, etc...
6d80: 7d 0a 0a 09 23 20 52 65 71 75 69 72 65 64 20 63  }...# Required c
6d90: 6f 6d 6d 61 6e 64 73 3a 0a 09 23 20 2d 20 54 4f  ommands:..# - TO
6da0: 44 4f 2d 53 50 45 43 20 45 78 63 6c 75 64 65 2f  DO-SPEC Exclude/
6db0: 49 6e 63 6c 75 64 65 20 75 73 65 72 73 20 66 72  Include users fr
6dc0: 6f 6d 20 65 6d 61 69 6c 20 64 65 6c 69 76 65 72  om email deliver
6dd0: 79 0a 09 23 20 2d 20 54 4f 44 4f 2d 53 50 45 43  y..# - TODO-SPEC
6de0: 20 53 75 73 70 65 6e 64 2f 61 63 74 69 76 61 74   Suspend/activat
6df0: 65 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 66  e notification f
6e00: 6f 72 20 61 20 70 72 6f 6a 65 63 74 2c 20 65 76  or a project, ev
6e10: 65 6e 74 20 74 79 70 65 2e 0a 09 23 20 2d 20 4d  ent type...# - M
6e20: 41 59 42 45 20 77 61 74 63 68 20 72 65 6d 6f 74  AYBE watch remot
6e30: 65 20 72 65 70 6f 20 28 70 69 6e 67 20 2f 73 74  e repo (ping /st
6e40: 61 74 29 20 3d 3e 20 63 72 65 61 74 65 20 61 20  at) => create a 
6e50: 6c 6f 63 61 6c 20 63 6c 6f 6e 65 2c 0a 09 23 20  local clone,..# 
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 77 61 74 63              watc
6e90: 68 20 69 6d 70 6c 69 65 73 20 73 79 6e 63 2e 0a  h implies sync..
6ea0: 09 23 0a 09 23 20 41 6c 6c 20 63 6f 6d 6d 61 6e  .#..# All comman
6eb0: 64 73 20 63 68 65 63 6b 20 66 6f 72 20 61 6e 64  ds check for and
6ec0: 20 72 65 6d 69 6e 64 20 74 68 65 20 75 73 65 72   remind the user
6ed0: 20 61 62 6f 75 74 20 61 20 6d 69 73 73 69 6e 67   about a missing
6ee0: 0a 09 23 20 6d 61 69 6c 20 63 6f 6e 66 69 67 75  ..# mail configu
6ef0: 72 61 74 69 6f 6e 2c 20 65 73 70 65 63 69 61 6c  ration, especial
6f00: 6c 79 20 74 68 65 20 6d 61 6e 64 61 74 6f 72 79  ly the mandatory
6f10: 20 66 69 65 6c 64 73 2e 0a 0a 09 6f 66 66 69 63   fields....offic
6f20: 65 72 20 63 6f 6e 66 69 67 20 7b 0a 09 20 20 20  er config {..   
6f30: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
6f40: 09 4d 61 6e 61 67 65 20 74 68 65 20 6d 61 69 6c  .Manage the mail
6f50: 20 73 65 74 75 70 20 66 6f 72 20 6e 6f 74 69 66   setup for notif
6f60: 69 63 61 74 69 6f 6e 20 65 6d 61 69 6c 73 2e 0a  ication emails..
6f70: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 63 6f 6d  .    }...    com
6f80: 6d 6f 6e 20 2e 67 6c 6f 62 61 6c 2d 6c 6f 63 61  mon .global-loca
6f90: 6c 20 7b 0a 09 09 6f 70 74 69 6f 6e 20 67 6c 6f  l {...option glo
6fa0: 62 61 6c 20 7b 0a 09 09 20 20 20 20 4f 70 65 72  bal {...    Oper
6fb0: 61 74 65 20 6f 6e 20 74 68 65 20 67 6c 6f 62 61  ate on the globa
6fc0: 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  l configuration.
6fd0: 0a 09 09 7d 20 7b 0a 09 09 20 20 20 20 61 6c 69  ...} {...    ali
6fe0: 61 73 20 47 20 3b 20 70 72 65 73 65 6e 63 65 0a  as G ; presence.
6ff0: 09 09 20 20 20 20 77 68 65 6e 2d 73 65 74 20 5b  ..    when-set [
7000: 3a 3a 66 78 3a 3a 73 65 71 75 65 6e 63 65 20 5c  ::fx::sequence \
7010: 0a 09 09 09 09 20 20 5b 3a 3a 66 78 3a 3a 65 78  .....  [::fx::ex
7020: 63 6c 75 64 65 20 6c 6f 63 61 6c 5d 20 5c 0a 09  clude local] \..
7030: 09 09 09 20 20 5b 3a 3a 66 78 3a 3a 6e 6f 2d 73  ...  [::fx::no-s
7040: 65 61 72 63 68 5d 5d 0a 09 09 7d 0a 09 09 6f 70  earch]]...}...op
7050: 74 69 6f 6e 20 6c 6f 63 61 6c 20 7b 0a 09 09 20  tion local {... 
7060: 20 20 20 4f 70 65 72 61 74 65 20 73 74 72 69 63     Operate stric
7070: 74 6c 79 20 6f 6e 20 74 68 65 20 6c 6f 63 61 6c  tly on the local
7080: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 0a   configuration..
7090: 09 09 7d 20 7b 0a 09 09 20 20 20 20 61 6c 69 61  ..} {...    alia
70a0: 73 20 4c 20 3b 20 70 72 65 73 65 6e 63 65 0a 09  s L ; presence..
70b0: 09 20 20 20 20 77 68 65 6e 2d 73 65 74 20 5b 3a  .    when-set [:
70c0: 3a 66 78 3a 3a 65 78 63 6c 75 64 65 20 67 6c 6f  :fx::exclude glo
70d0: 62 61 6c 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  bal]...}..    }.
70e0: 0a 09 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e 6b 65  ..    common .ke
70f0: 79 20 7b 0a 09 09 69 6e 70 75 74 20 6b 65 79 20  y {...input key 
7100: 7b 0a 09 09 20 20 20 20 54 68 65 20 70 61 72 74  {...    The part
7110: 20 6f 66 20 74 68 65 20 6d 61 69 6c 20 73 65 74   of the mail set
7120: 75 70 20 74 6f 20 28 72 65 29 63 6f 6e 66 69 67  up to (re)config
7130: 75 72 65 2e 0a 09 09 7d 20 7b 20 76 61 6c 69 64  ure....} { valid
7140: 61 74 65 20 5b 66 78 3a 3a 76 74 20 6d 61 69 6c  ate [fx::vt mail
7150: 2d 63 6f 6e 66 69 67 5d 20 7d 0a 09 20 20 20 20  -config] }..    
7160: 7d 0a 0a 09 20 20 20 20 63 6f 6d 6d 6f 6e 20 2e  }...    common .
7170: 6b 65 79 2d 6c 69 73 74 20 7b 0a 09 09 69 6e 70  key-list {...inp
7180: 75 74 20 6b 65 79 20 7b 0a 09 09 20 20 20 20 54  ut key {...    T
7190: 68 65 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  he parts of the 
71a0: 6d 61 69 6c 20 73 65 74 75 70 20 74 6f 20 75 6e  mail setup to un
71b0: 73 65 74 2e 0a 09 09 7d 20 7b 20 6c 69 73 74 20  set....} { list 
71c0: 3b 20 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a  ; validate [fx::
71d0: 76 74 20 6d 61 69 6c 2d 63 6f 6e 66 69 67 5d 20  vt mail-config] 
71e0: 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 70  }..    }...    p
71f0: 72 69 76 61 74 65 20 73 68 6f 77 20 7b 0a 09 09  rivate show {...
7200: 73 65 63 74 69 6f 6e 20 4e 6f 74 69 66 69 63 61  section Notifica
7210: 74 69 6f 6e 73 20 7b 4d 61 69 6c 20 73 65 74 75  tions {Mail setu
7220: 70 7d 0a 09 09 73 65 63 74 69 6f 6e 20 49 6e 74  p}...section Int
7230: 72 6f 73 70 65 63 74 69 6f 6e 0a 09 09 64 65 73  rospection...des
7240: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 20 20 20  cription {...   
7250: 20 53 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e   Show the curren
7260: 74 20 6d 61 69 6c 20 73 65 74 75 70 20 66 6f 72  t mail setup for
7270: 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 73 2e 0a   notifications..
7280: 09 09 7d 0a 09 09 75 73 65 20 2e 67 6c 6f 62 61  ..}...use .globa
7290: 6c 2d 6c 6f 63 61 6c 0a 09 09 75 73 65 20 2e 72  l-local...use .r
72a0: 65 70 6f 73 69 74 6f 72 79 0a 09 20 20 20 20 7d  epository..    }
72b0: 20 5b 66 78 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20   [fx::call note 
72c0: 6d 61 69 6c 2d 63 6f 6e 66 69 67 2d 73 68 6f 77  mail-config-show
72d0: 5d 0a 09 20 20 20 20 64 65 66 61 75 6c 74 0a 0a  ]..    default..
72e0: 09 20 20 20 20 70 72 69 76 61 74 65 20 73 65 74  .    private set
72f0: 20 7b 0a 09 09 73 65 63 74 69 6f 6e 20 4e 6f 74   {...section Not
7300: 69 66 69 63 61 74 69 6f 6e 73 20 7b 4d 61 69 6c  ifications {Mail
7310: 20 73 65 74 75 70 7d 0a 09 09 64 65 73 63 72 69   setup}...descri
7320: 70 74 69 6f 6e 20 7b 0a 09 09 20 20 20 20 53 65  ption {...    Se
7330: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
7340: 70 61 72 74 20 6f 66 20 74 68 65 20 6d 61 69 6c  part of the mail
7350: 20 73 65 74 75 70 20 66 6f 72 20 6e 6f 74 69 66   setup for notif
7360: 69 63 61 74 69 6f 6e 73 2e 0a 09 09 7d 0a 09 09  ications....}...
7370: 75 73 65 20 2e 67 6c 6f 62 61 6c 0a 09 09 75 73  use .global...us
7380: 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09 09  e .repository...
7390: 75 73 65 20 2e 6b 65 79 0a 09 09 69 6e 70 75 74  use .key...input
73a0: 20 76 61 6c 75 65 20 7b 0a 09 09 20 20 20 20 54   value {...    T
73b0: 68 65 20 6e 65 77 20 76 61 6c 75 65 20 6f 66 20  he new value of 
73c0: 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
73d0: 6e 2e 0a 09 09 7d 0a 09 20 20 20 20 7d 20 5b 66  n....}..    } [f
73e0: 78 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20 6d 61 69  x::call note mai
73f0: 6c 2d 63 6f 6e 66 69 67 2d 73 65 74 5d 0a 0a 09  l-config-set]...
7400: 20 20 20 20 70 72 69 76 61 74 65 20 75 6e 73 65      private unse
7410: 74 20 7b 0a 09 09 73 65 63 74 69 6f 6e 20 4e 6f  t {...section No
7420: 74 69 66 69 63 61 74 69 6f 6e 73 20 7b 4d 61 69  tifications {Mai
7430: 6c 20 73 65 74 75 70 7d 0a 09 09 64 65 73 63 72  l setup}...descr
7440: 69 70 74 69 6f 6e 20 7b 0a 09 09 20 20 20 20 52  iption {...    R
7450: 65 73 65 74 20 74 68 65 20 73 70 65 63 69 66 69  eset the specifi
7460: 65 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 6d  ed part of the m
7470: 61 69 6c 20 73 65 74 75 70 20 66 6f 72 20 6e 6f  ail setup for no
7480: 74 69 66 69 63 61 74 69 6f 6e 73 0a 09 09 20 20  tifications...  
7490: 20 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74    to its default
74a0: 2e 0a 09 09 7d 0a 09 09 75 73 65 20 2e 67 6c 6f  ....}...use .glo
74b0: 62 61 6c 0a 09 09 75 73 65 20 2e 72 65 70 6f 73  bal...use .repos
74c0: 69 74 6f 72 79 0a 09 09 75 73 65 20 2e 6b 65 79  itory...use .key
74d0: 2d 6c 69 73 74 0a 09 20 20 20 20 7d 20 5b 66 78  -list..    } [fx
74e0: 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20 6d 61 69 6c  ::call note mail
74f0: 2d 63 6f 6e 66 69 67 2d 75 6e 73 65 74 5d 0a 0a  -config-unset]..
7500: 09 20 20 20 20 70 72 69 76 61 74 65 20 72 65 73  .    private res
7510: 65 74 20 7b 0a 09 09 73 65 63 74 69 6f 6e 20 4e  et {...section N
7520: 6f 74 69 66 69 63 61 74 69 6f 6e 73 20 7b 4d 61  otifications {Ma
7530: 69 6c 20 73 65 74 75 70 7d 0a 09 09 64 65 73 63  il setup}...desc
7540: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 20 20 20 20  ription {...    
7550: 52 65 73 65 74 20 61 6c 6c 20 70 61 72 74 73 20  Reset all parts 
7560: 6f 66 20 74 68 65 20 6d 61 69 6c 20 73 65 74 75  of the mail setu
7570: 70 20 66 6f 72 20 6e 6f 74 69 66 69 63 61 74 69  p for notificati
7580: 6f 6e 73 0a 09 09 20 20 20 20 74 6f 20 74 68 65  ons...    to the
7590: 69 72 20 64 65 66 61 75 6c 74 73 2e 0a 09 09 7d  ir defaults....}
75a0: 0a 09 09 75 73 65 20 2e 67 6c 6f 62 61 6c 0a 09  ...use .global..
75b0: 09 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79  .use .repository
75c0: 0a 09 20 20 20 20 7d 20 5b 66 78 3a 3a 63 61 6c  ..    } [fx::cal
75d0: 6c 20 6e 6f 74 65 20 6d 61 69 6c 2d 63 6f 6e 66  l note mail-conf
75e0: 69 67 2d 72 65 73 65 74 5d 0a 0a 09 20 20 20 20  ig-reset]...    
75f0: 70 72 69 76 61 74 65 20 65 78 70 6f 72 74 20 7b  private export {
7600: 0a 09 09 73 65 63 74 69 6f 6e 20 4e 6f 74 69 66  ...section Notif
7610: 69 63 61 74 69 6f 6e 73 20 53 61 76 65 2f 52 65  ications Save/Re
7620: 73 74 6f 72 65 0a 09 09 64 65 73 63 72 69 70 74  store...descript
7630: 69 6f 6e 20 7b 0a 09 09 20 20 20 20 53 61 76 65  ion {...    Save
7640: 20 74 68 65 20 6e 6f 74 69 66 69 63 61 74 69 6f   the notificatio
7650: 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n configuration 
7660: 69 6e 74 6f 20 61 20 66 69 6c 65 2e 0a 09 09 7d  into a file....}
7670: 0a 09 09 75 73 65 20 2e 67 6c 6f 62 61 6c 2d 6c  ...use .global-l
7680: 6f 63 61 6c 0a 09 09 75 73 65 20 2e 72 65 70 6f  ocal...use .repo
7690: 73 69 74 6f 72 79 0a 09 09 75 73 65 20 2e 65 78  sitory...use .ex
76a0: 70 6f 72 74 0a 09 20 20 20 20 7d 20 5b 66 78 3a  port..    } [fx:
76b0: 3a 63 61 6c 6c 20 6e 6f 74 65 20 6d 61 69 6c 2d  :call note mail-
76c0: 63 6f 6e 66 69 67 2d 65 78 70 6f 72 74 5d 0a 0a  config-export]..
76d0: 09 20 20 20 20 70 72 69 76 61 74 65 20 69 6d 70  .    private imp
76e0: 6f 72 74 20 7b 0a 09 09 73 65 63 74 69 6f 6e 20  ort {...section 
76f0: 4e 6f 74 69 66 69 63 61 74 69 6f 6e 73 20 53 61  Notifications Sa
7700: 76 65 2f 52 65 73 74 6f 72 65 0a 09 09 64 65 73  ve/Restore...des
7710: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 20 20 20  cription {...   
7720: 20 49 6d 70 6f 72 74 20 74 68 65 20 6e 6f 74 69   Import the noti
7730: 66 69 63 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  fication configu
7740: 72 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 73 61  ration from a sa
7750: 76 65 20 66 69 6c 65 2e 0a 09 09 7d 0a 09 09 75  ve file....}...u
7760: 73 65 20 2e 67 6c 6f 62 61 6c 0a 09 09 75 73 65  se .global...use
7770: 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09 09 75   .repository...u
7780: 73 65 20 2e 69 6d 70 6f 72 74 0a 09 09 75 73 65  se .import...use
7790: 20 2e 6d 61 69 6c 63 6f 6e 66 69 67 2d 68 69 64   .mailconfig-hid
77a0: 64 65 6e 2d 76 61 6c 69 64 61 74 69 6f 6e 0a 09  den-validation..
77b0: 20 20 20 20 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20      } [fx::call 
77c0: 6e 6f 74 65 20 6d 61 69 6c 2d 63 6f 6e 66 69 67  note mail-config
77d0: 2d 69 6d 70 6f 72 74 5d 0a 09 7d 0a 0a 09 70 72  -import]..}...pr
77e0: 69 76 61 74 65 20 75 70 64 61 74 65 2d 68 69 73  ivate update-his
77f0: 74 6f 72 79 20 7b 0a 09 20 20 20 20 73 65 63 74  tory {..    sect
7800: 69 6f 6e 20 4e 6f 74 69 66 69 63 61 74 69 6f 6e  ion Notification
7810: 73 20 43 6f 6e 74 72 6f 6c 0a 09 20 20 20 20 64  s Control..    d
7820: 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 55  escription {...U
7830: 70 64 61 74 65 20 74 68 65 20 63 61 63 68 65 64  pdate the cached
7840: 20 74 69 63 6b 65 74 20 68 69 73 74 6f 72 79 20   ticket history 
7850: 75 73 65 64 20 74 6f 20 63 61 6c 63 75 6c 61 74  used to calculat
7860: 65 0a 09 09 64 79 6e 61 6d 69 63 20 72 6f 75 74  e...dynamic rout
7870: 65 73 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  es...    }..    
7880: 6f 70 74 69 6f 6e 20 63 6c 65 61 72 20 7b 0a 09  option clear {..
7890: 09 43 6c 65 61 72 20 74 68 65 20 74 69 63 6b 65  .Clear the ticke
78a0: 74 20 68 69 73 74 6f 72 79 20 62 65 66 6f 72 65  t history before
78b0: 20 75 70 64 61 74 69 6e 67 2e 20 49 2e 65 2e 20   updating. I.e. 
78c0: 66 6f 72 63 65 0a 09 09 66 75 6c 6c 20 75 70 64  force...full upd
78d0: 61 74 65 20 66 72 6f 6d 20 73 63 72 61 74 63 68  ate from scratch
78e0: 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 64 6f 69  , instead of doi
78f0: 6e 67 20 61 6e 0a 09 09 69 6e 63 72 65 6d 65 6e  ng an...incremen
7900: 74 61 6c 20 6f 6e 65 2e 0a 0a 09 20 20 20 20 7d  tal one....    }
7910: 20 7b 20 70 72 65 73 65 6e 63 65 20 7d 0a 09 20   { presence }.. 
7920: 20 20 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f     use .reposito
7930: 72 79 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20  ry..} [fx::call 
7940: 73 65 65 6e 20 72 65 67 65 6e 65 72 61 74 65 2d  seen regenerate-
7950: 73 65 72 69 65 73 5d 0a 0a 09 70 72 69 76 61 74  series]...privat
7960: 65 20 77 61 74 63 68 65 64 20 7b 0a 09 20 20 20  e watched {..   
7970: 20 73 65 63 74 69 6f 6e 20 4e 6f 74 69 66 69 63   section Notific
7980: 61 74 69 6f 6e 73 20 43 6f 6e 74 72 6f 6c 0a 09  ations Control..
7990: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20      description 
79a0: 7b 0a 09 09 53 68 6f 77 20 74 68 65 20 6c 69 73  {...Show the lis
79b0: 74 20 6f 66 20 72 65 70 6f 73 69 74 6f 72 69 65  t of repositorie
79c0: 73 20 63 75 72 72 65 6e 74 6c 79 20 77 61 74 63  s currently watc
79d0: 68 65 64 0a 09 09 28 3c 3d 3e 20 74 68 6f 73 65  hed...(<=> those
79e0: 20 77 68 69 63 68 20 68 61 76 65 20 61 63 74 69   which have acti
79f0: 76 65 20 72 6f 75 74 65 73 29 2e 20 54 68 65 73  ve routes). Thes
7a00: 65 20 66 61 6c 6c 0a 09 09 75 6e 64 65 72 20 74  e fall...under t
7a10: 68 65 20 70 75 72 76 69 65 77 20 6f 66 20 27 6e  he purview of 'n
7a20: 6f 74 65 20 64 65 6c 69 76 65 72 20 2d 2d 61 6c  ote deliver --al
7a30: 6c 27 2e 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66  l'...    }..} [f
7a40: 78 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20 77 61 74  x::call note wat
7a50: 63 68 65 64 5d 0a 0a 09 23 20 54 4f 44 4f 3a 20  ched]...# TODO: 
7a60: 47 6c 6f 62 61 6c 20 72 6f 75 74 65 73 3f 0a 09  Global routes?..
7a70: 6f 66 66 69 63 65 72 20 72 6f 75 74 65 20 7b 0a  officer route {.
7a80: 09 20 20 20 20 63 6f 6d 6d 6f 6e 20 2a 61 6c 6c  .    common *all
7a90: 2a 20 2d 65 78 74 65 6e 64 20 7b 0a 09 09 75 73  * -extend {...us
7aa0: 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09 20  e .repository.. 
7ab0: 20 20 20 7d 0a 0a 09 20 20 20 20 70 72 69 76 61     }...    priva
7ac0: 74 65 20 6c 69 73 74 20 7b 0a 09 09 73 65 63 74  te list {...sect
7ad0: 69 6f 6e 20 4e 6f 74 69 66 69 63 61 74 69 6f 6e  ion Notification
7ae0: 73 20 44 65 73 74 69 6e 61 74 69 6f 6e 73 0a 09  s Destinations..
7af0: 09 73 65 63 74 69 6f 6e 20 49 6e 74 72 6f 73 70  .section Introsp
7b00: 65 63 74 69 6f 6e 0a 09 09 64 65 73 63 72 69 70  ection...descrip
7b10: 74 69 6f 6e 20 7b 0a 09 09 20 20 20 20 53 68 6f  tion {...    Sho
7b20: 77 20 61 6c 6c 20 63 6f 6e 66 69 67 75 72 65 64  w all configured
7b30: 20 6d 61 69 6c 20 64 65 73 74 69 6e 61 74 69 6f   mail destinatio
7b40: 6e 73 20 28 70 65 72 20 65 76 65 6e 74 20 74 79  ns (per event ty
7b50: 70 65 29 2e 0a 09 09 7d 0a 09 09 75 73 65 20 2e  pe)....}...use .
7b60: 72 6f 75 74 65 6d 61 70 0a 09 20 20 20 20 7d 20  routemap..    } 
7b70: 5b 66 78 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20 72  [fx::call note r
7b80: 6f 75 74 65 2d 6c 69 73 74 5d 0a 09 20 20 20 20  oute-list]..    
7b90: 64 65 66 61 75 6c 74 0a 0a 09 20 20 20 20 70 72  default...    pr
7ba0: 69 76 61 74 65 20 65 78 70 6f 72 74 20 7b 0a 09  ivate export {..
7bb0: 09 73 65 63 74 69 6f 6e 20 4e 6f 74 69 66 69 63  .section Notific
7bc0: 61 74 69 6f 6e 73 20 53 61 76 65 2f 52 65 73 74  ations Save/Rest
7bd0: 6f 72 65 0a 09 09 64 65 73 63 72 69 70 74 69 6f  ore...descriptio
7be0: 6e 20 7b 0a 09 09 20 20 20 20 53 61 76 65 20 74  n {...    Save t
7bf0: 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 6d 61  he configured ma
7c00: 69 6c 20 64 65 73 74 69 6e 61 74 69 6f 6e 73 20  il destinations 
7c10: 69 6e 74 6f 20 61 20 66 69 6c 65 2e 0a 09 09 7d  into a file....}
7c20: 0a 09 09 75 73 65 20 2e 65 78 70 6f 72 74 0a 09  ...use .export..
7c30: 09 75 73 65 20 2e 72 6f 75 74 65 6d 61 70 0a 09  .use .routemap..
7c40: 20 20 20 20 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20      } [fx::call 
7c50: 6e 6f 74 65 20 72 6f 75 74 65 2d 65 78 70 6f 72  note route-expor
7c60: 74 5d 0a 0a 09 20 20 20 20 70 72 69 76 61 74 65  t]...    private
7c70: 20 69 6d 70 6f 72 74 20 7b 0a 09 09 73 65 63 74   import {...sect
7c80: 69 6f 6e 20 4e 6f 74 69 66 69 63 61 74 69 6f 6e  ion Notification
7c90: 73 20 53 61 76 65 2f 52 65 73 74 6f 72 65 0a 09  s Save/Restore..
7ca0: 09 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09  .description {..
7cb0: 09 20 20 20 20 49 6d 70 6f 72 74 20 6d 61 69 6c  .    Import mail
7cc0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 73 20 66 72   destinations fr
7cd0: 6f 6d 20 61 20 73 61 76 65 20 66 69 6c 65 2e 0a  om a save file..
7ce0: 09 09 7d 0a 09 09 75 73 65 20 2e 65 78 74 65 6e  ..}...use .exten
7cf0: 64 0a 09 09 75 73 65 20 2e 69 6d 70 6f 72 74 0a  d...use .import.
7d00: 09 09 75 73 65 20 2e 72 6f 75 74 65 6d 61 70 0a  ..use .routemap.
7d10: 09 20 20 20 20 7d 20 5b 66 78 3a 3a 63 61 6c 6c  .    } [fx::call
7d20: 20 6e 6f 74 65 20 72 6f 75 74 65 2d 69 6d 70 6f   note route-impo
7d30: 72 74 5d 0a 0a 09 20 20 20 20 63 6f 6d 6d 6f 6e  rt]...    common
7d40: 20 2e 65 74 79 70 65 20 7b 0a 09 09 69 6e 70 75   .etype {...inpu
7d50: 74 20 65 76 65 6e 74 20 7b 0a 09 09 20 20 20 20  t event {...    
7d60: 45 76 65 6e 74 20 74 6f 20 77 6f 72 6b 20 77 69  Event to work wi
7d70: 74 68 2e 0a 09 09 7d 20 7b 20 76 61 6c 69 64 61  th....} { valida
7d80: 74 65 20 5b 66 78 3a 3a 76 74 20 65 76 65 6e 74  te [fx::vt event
7d90: 2d 78 74 79 70 65 5d 20 7d 0a 09 20 20 20 20 7d  -xtype] }..    }
7da0: 0a 0a 09 20 20 20 20 70 72 69 76 61 74 65 20 61  ...    private a
7db0: 64 64 20 7b 0a 09 09 73 65 63 74 69 6f 6e 20 4e  dd {...section N
7dc0: 6f 74 69 66 69 63 61 74 69 6f 6e 73 20 44 65 73  otifications Des
7dd0: 74 69 6e 61 74 69 6f 6e 73 0a 09 09 64 65 73 63  tinations...desc
7de0: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 20 20 20 20  ription {...    
7df0: 41 64 64 20 66 69 78 65 64 20 6d 61 69 6c 20 64  Add fixed mail d
7e00: 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74  estination for t
7e10: 68 65 20 6e 61 6d 65 64 20 65 76 65 6e 74 20 74  he named event t
7e20: 79 70 65 2e 0a 09 09 7d 0a 09 09 75 73 65 20 2e  ype....}...use .
7e30: 65 74 79 70 65 0a 09 09 69 6e 70 75 74 20 74 6f  etype...input to
7e40: 20 7b 0a 09 09 20 20 20 20 45 6d 61 69 6c 20 61   {...    Email a
7e50: 64 64 72 65 73 73 65 73 20 6f 66 20 74 68 65 20  ddresses of the 
7e60: 61 64 64 65 64 20 72 6f 75 74 65 73 2e 0a 09 09  added routes....
7e70: 7d 20 7b 0a 09 09 20 20 20 20 6c 69 73 74 0a 09  } {...    list..
7e80: 09 20 20 20 20 76 61 6c 69 64 61 74 65 20 5b 66  .    validate [f
7e90: 78 3a 3a 76 74 20 6d 61 69 6c 2d 61 64 64 72 65  x::vt mail-addre
7ea0: 73 73 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 5b  ss]...}..    } [
7eb0: 66 78 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20 72 6f  fx::call note ro
7ec0: 75 74 65 2d 61 64 64 5d 0a 0a 09 20 20 20 20 70  ute-add]...    p
7ed0: 72 69 76 61 74 65 20 64 72 6f 70 20 7b 0a 09 09  rivate drop {...
7ee0: 73 65 63 74 69 6f 6e 20 4e 6f 74 69 66 69 63 61  section Notifica
7ef0: 74 69 6f 6e 73 20 44 65 73 74 69 6e 61 74 69 6f  tions Destinatio
7f00: 6e 73 0a 09 09 64 65 73 63 72 69 70 74 69 6f 6e  ns...description
7f10: 20 7b 0a 09 09 20 20 20 20 52 65 6d 6f 76 65 20   {...    Remove 
7f20: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d 61  the specified ma
7f30: 69 6c 20 64 65 73 74 69 6e 61 74 69 6f 6e 73 0a  il destinations.
7f40: 09 09 20 20 20 20 28 67 6c 6f 62 20 70 61 74 74  ..    (glob patt
7f50: 65 72 6e 29 20 66 6f 72 20 74 68 65 20 65 76 65  ern) for the eve
7f60: 6e 74 20 74 79 70 65 2e 0a 09 09 7d 0a 09 09 75  nt type....}...u
7f70: 73 65 20 2e 65 74 79 70 65 0a 09 09 69 6e 70 75  se .etype...inpu
7f80: 74 20 74 6f 20 7b 0a 09 09 20 20 20 20 47 6c 6f  t to {...    Glo
7f90: 62 20 70 61 74 74 65 72 6e 73 20 6f 66 20 74 68  b patterns of th
7fa0: 65 20 65 6d 61 69 6c 73 20 74 6f 20 72 65 6d 6f  e emails to remo
7fb0: 76 65 0a 09 09 20 20 20 20 66 72 6f 6d 20 74 68  ve...    from th
7fc0: 65 20 72 6f 75 74 65 73 2e 0a 09 09 7d 20 7b 0a  e routes....} {.
7fd0: 09 09 20 20 20 20 6f 70 74 69 6f 6e 61 6c 0a 09  ..    optional..
7fe0: 09 20 20 20 20 6c 69 73 74 0a 09 09 20 20 20 20  .    list...    
7ff0: 64 65 66 61 75 6c 74 20 2a 0a 09 09 20 20 20 20  default *...    
8000: 76 61 6c 69 64 61 74 65 20 73 74 72 0a 09 09 7d  validate str...}
8010: 0a 09 20 20 20 20 7d 20 5b 66 78 3a 3a 63 61 6c  ..    } [fx::cal
8020: 6c 20 6e 6f 74 65 20 72 6f 75 74 65 2d 64 72 6f  l note route-dro
8030: 70 5d 0a 0a 09 20 20 20 20 70 72 69 76 61 74 65  p]...    private
8040: 20 65 76 65 6e 74 73 20 7b 0a 09 09 73 65 63 74   events {...sect
8050: 69 6f 6e 20 4e 6f 74 69 66 69 63 61 74 69 6f 6e  ion Notification
8060: 73 20 44 65 73 74 69 6e 61 74 69 6f 6e 73 0a 09  s Destinations..
8070: 09 73 65 63 74 69 6f 6e 20 49 6e 74 72 6f 73 70  .section Introsp
8080: 65 63 74 69 6f 6e 0a 09 09 64 65 73 63 72 69 70  ection...descrip
8090: 74 69 6f 6e 20 7b 0a 09 09 20 20 20 20 53 68 6f  tion {...    Sho
80a0: 77 20 61 6c 6c 20 65 76 65 6e 74 73 20 77 65 20  w all events we 
80b0: 63 61 6e 20 67 65 6e 65 72 61 74 65 20 6e 6f 74  can generate not
80c0: 69 66 69 63 61 74 69 6f 6e 73 20 66 6f 72 2e 0a  ifications for..
80d0: 09 09 7d 0a 09 20 20 20 20 7d 20 5b 66 78 3a 3a  ..}..    } [fx::
80e0: 63 61 6c 6c 20 6e 6f 74 65 20 65 76 65 6e 74 2d  call note event-
80f0: 6c 69 73 74 5d 0a 0a 09 20 20 20 20 6f 66 66 69  list]...    offi
8100: 63 65 72 20 66 69 65 6c 64 20 7b 0a 09 09 70 72  cer field {...pr
8110: 69 76 61 74 65 20 6c 69 73 74 20 7b 0a 09 09 20  ivate list {... 
8120: 20 20 20 73 65 63 74 69 6f 6e 20 4e 6f 74 69 66     section Notif
8130: 69 63 61 74 69 6f 6e 73 20 44 65 73 74 69 6e 61  ications Destina
8140: 74 69 6f 6e 73 0a 09 09 20 20 20 20 73 65 63 74  tions...    sect
8150: 69 6f 6e 20 49 6e 74 72 6f 73 70 65 63 74 69 6f  ion Introspectio
8160: 6e 0a 09 09 20 20 20 20 64 65 73 63 72 69 70 74  n...    descript
8170: 69 6f 6e 20 7b 0a 09 09 09 53 68 6f 77 20 61 6c  ion {....Show al
8180: 6c 20 61 76 61 69 6c 61 62 6c 65 20 74 69 63 6b  l available tick
8190: 65 74 20 66 69 65 6c 64 73 20 28 66 6f 72 20 64  et fields (for d
81a0: 79 6e 61 6d 69 63 20 72 6f 75 74 65 73 29 2e 0a  ynamic routes)..
81b0: 09 09 20 20 20 20 7d 0a 09 09 7d 20 5b 66 78 3a  ..    }...} [fx:
81c0: 3a 63 61 6c 6c 20 6e 6f 74 65 20 66 69 65 6c 64  :call note field
81d0: 2d 6c 69 73 74 5d 0a 09 09 64 65 66 61 75 6c 74  -list]...default
81e0: 0a 0a 09 09 70 72 69 76 61 74 65 20 61 64 64 20  ....private add 
81f0: 7b 0a 09 09 20 20 20 20 73 65 63 74 69 6f 6e 20  {...    section 
8200: 4e 6f 74 69 66 69 63 61 74 69 6f 6e 73 20 44 65  Notifications De
8210: 73 74 69 6e 61 74 69 6f 6e 73 0a 09 09 20 20 20  stinations...   
8220: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
8230: 09 09 41 64 64 20 66 69 65 6c 64 20 61 73 20 73  ..Add field as s
8240: 6f 75 72 63 65 20 6f 66 20 6d 61 69 6c 20 64 65  ource of mail de
8250: 73 74 69 6e 61 74 69 6f 6e 73 20 66 6f 72 20 74  stinations for t
8260: 69 63 6b 65 74 20 65 76 65 6e 74 73 2e 0a 09 09  icket events....
8270: 20 20 20 20 7d 0a 09 09 20 20 20 20 69 6e 70 75      }...    inpu
8280: 74 20 66 69 65 6c 64 20 7b 0a 09 09 09 4e 61 6d  t field {....Nam
8290: 65 20 6f 66 20 74 68 65 20 66 69 65 6c 64 20 74  e of the field t
82a0: 6f 20 75 73 65 20 61 73 20 73 6f 75 72 63 65 20  o use as source 
82b0: 6f 66 20 6d 61 69 6c 20 64 65 73 74 69 6e 61 74  of mail destinat
82c0: 69 6f 6e 73 2e 0a 09 09 20 20 20 20 7d 20 7b 0a  ions....    } {.
82d0: 09 09 09 6c 69 73 74 0a 09 09 09 76 61 6c 69 64  ...list....valid
82e0: 61 74 65 20 5b 66 78 3a 3a 76 74 20 74 69 63 6b  ate [fx::vt tick
82f0: 65 74 2d 66 69 65 6c 64 5d 0a 09 09 20 20 20 20  et-field]...    
8300: 7d 0a 09 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20  }...} [fx::call 
8310: 6e 6f 74 65 20 72 6f 75 74 65 2d 66 69 65 6c 64  note route-field
8320: 2d 61 64 64 5d 0a 0a 09 09 70 72 69 76 61 74 65  -add]....private
8330: 20 64 72 6f 70 20 7b 0a 09 09 20 20 20 20 73 65   drop {...    se
8340: 63 74 69 6f 6e 20 4e 6f 74 69 66 69 63 61 74 69  ction Notificati
8350: 6f 6e 73 20 44 65 73 74 69 6e 61 74 69 6f 6e 73  ons Destinations
8360: 0a 09 09 20 20 20 20 64 65 73 63 72 69 70 74 69  ...    descripti
8370: 6f 6e 20 7b 0a 09 09 09 52 65 6d 6f 76 65 20 74  on {....Remove t
8380: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 65  he specified fie
8390: 6c 64 20 61 73 20 73 6f 75 72 63 65 0a 09 09 09  ld as source....
83a0: 6f 66 20 6d 61 69 6c 20 64 65 73 74 69 6e 61 74  of mail destinat
83b0: 69 6f 6e 73 20 66 6f 72 20 74 69 63 6b 65 74 20  ions for ticket 
83c0: 65 76 65 6e 74 73 2e 0a 09 09 20 20 20 20 7d 0a  events....    }.
83d0: 09 09 20 20 20 20 69 6e 70 75 74 20 66 69 65 6c  ..    input fiel
83e0: 64 20 7b 0a 09 09 09 4e 61 6d 65 20 6f 66 20 74  d {....Name of t
83f0: 68 65 20 66 69 65 6c 64 20 74 6f 20 73 74 6f 70  he field to stop
8400: 20 75 73 69 6e 67 20 61 73 20 73 6f 75 72 63 65   using as source
8410: 20 6f 66 20 6d 61 69 6c 20 64 65 73 74 69 6e 61   of mail destina
8420: 74 69 6f 6e 73 2e 0a 09 09 20 20 20 20 7d 20 7b  tions....    } {
8430: 0a 09 09 09 6c 69 73 74 0a 09 09 09 76 61 6c 69  ....list....vali
8440: 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 74 69 63  date [fx::vt tic
8450: 6b 65 74 2d 66 69 65 6c 64 5d 0a 09 09 20 20 20  ket-field]...   
8460: 20 7d 0a 09 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c   }...} [fx::call
8470: 20 6e 6f 74 65 20 72 6f 75 74 65 2d 66 69 65 6c   note route-fiel
8480: 64 2d 64 72 6f 70 5d 0a 09 20 20 20 20 7d 0a 09  d-drop]..    }..
8490: 20 20 20 20 61 6c 69 61 73 20 66 69 65 6c 64 73      alias fields
84a0: 20 3d 20 66 69 65 6c 64 20 6c 69 73 74 0a 09 7d   = field list..}
84b0: 0a 0a 09 61 6c 69 61 73 20 72 6f 75 74 65 73 20  ...alias routes 
84c0: 3d 20 72 6f 75 74 65 20 6c 69 73 74 0a 0a 09 70  = route list...p
84d0: 72 69 76 61 74 65 20 64 65 6c 69 76 65 72 20 7b  rivate deliver {
84e0: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 4e 6f  ..    section No
84f0: 74 69 66 69 63 61 74 69 6f 6e 73 0a 09 20 20 20  tifications..   
8500: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
8510: 09 53 65 6e 64 20 6e 6f 74 69 66 69 63 61 74 69  .Send notificati
8520: 6f 6e 20 65 6d 61 69 6c 73 20 74 6f 20 61 6c 6c  on emails to all
8530: 20 63 6f 6e 66 69 67 75 72 65 64 20 64 65 73 74   configured dest
8540: 69 6e 61 74 69 6f 6e 73 2c 0a 09 09 66 6f 72 20  inations,...for 
8550: 61 6c 6c 20 6e 65 77 20 65 76 65 6e 74 73 20 28  all new events (
8560: 73 69 6e 63 65 20 74 68 65 20 6c 61 73 74 20 64  since the last d
8570: 65 6c 69 76 65 72 79 29 2e 0a 09 20 20 20 20 7d  elivery)...    }
8580: 0a 09 20 20 20 20 75 73 65 20 2e 61 6c 6c 0a 09  ..    use .all..
8590: 20 20 20 20 75 73 65 20 2e 72 65 70 6f 73 69 74      use .reposit
85a0: 6f 72 79 0a 09 20 20 20 20 75 73 65 20 2e 72 6f  ory..    use .ro
85b0: 75 74 65 6d 61 70 0a 09 20 20 20 20 75 73 65 20  utemap..    use 
85c0: 2e 76 65 72 62 6f 73 65 0a 09 7d 20 5b 66 78 3a  .verbose..} [fx:
85d0: 3a 63 61 6c 6c 20 6e 6f 74 65 20 64 65 6c 69 76  :call note deliv
85e0: 65 72 5d 0a 0a 09 70 72 69 76 61 74 65 20 6d 61  er]...private ma
85f0: 72 6b 2d 70 65 6e 64 69 6e 67 20 7b 0a 09 20 20  rk-pending {..  
8600: 20 20 73 65 63 74 69 6f 6e 20 4e 6f 74 69 66 69    section Notifi
8610: 63 61 74 69 6f 6e 73 20 43 6f 6e 74 72 6f 6c 0a  cations Control.
8620: 09 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e  .    description
8630: 20 7b 0a 09 09 4d 61 72 6b 20 74 68 65 20 73 70   {...Mark the sp
8640: 65 63 69 66 69 65 64 20 28 6f 72 20 61 6c 6c 29  ecified (or all)
8650: 20 61 72 74 69 66 61 63 74 73 20 61 73 20 68 61   artifacts as ha
8660: 76 69 6e 67 20 6e 6f 74 0a 09 09 62 65 65 6e 20  ving not...been 
8670: 6e 6f 74 69 66 69 65 64 20 62 65 66 6f 72 65 2e  notified before.
8680: 20 54 68 69 73 20 66 6f 72 63 65 73 20 74 68 65   This forces the
8690: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 61   generation of a
86a0: 0a 09 09 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20  ...notification 
86b0: 66 6f 72 20 74 68 65 6d 20 6f 6e 20 74 68 65 20  for them on the 
86c0: 6e 65 78 74 20 69 6e 76 6f 6b 61 74 69 6f 6e 20  next invokation 
86d0: 6f 66 0a 09 09 22 6e 6f 74 65 20 64 65 6c 69 76  of..."note deliv
86e0: 65 72 22 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20  er"...    }..   
86f0: 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79   use .repository
8700: 0a 09 20 20 20 20 75 73 65 20 2e 75 75 69 64 2d  ..    use .uuid-
8710: 6f 72 2d 61 6c 6c 0a 09 7d 20 5b 66 78 3a 3a 63  or-all..} [fx::c
8720: 61 6c 6c 20 6e 6f 74 65 20 6d 61 72 6b 2d 70 65  all note mark-pe
8730: 6e 64 69 6e 67 5d 0a 0a 09 70 72 69 76 61 74 65  nding]...private
8740: 20 6d 61 72 6b 2d 6e 6f 74 69 66 69 65 64 20 7b   mark-notified {
8750: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 4e 6f  ..    section No
8760: 74 69 66 69 63 61 74 69 6f 6e 73 20 43 6f 6e 74  tifications Cont
8770: 72 6f 6c 0a 09 20 20 20 20 64 65 73 63 72 69 70  rol..    descrip
8780: 74 69 6f 6e 20 7b 0a 09 09 4d 61 72 6b 20 74 68  tion {...Mark th
8790: 65 20 73 70 65 63 69 66 69 65 64 20 28 6f 72 20  e specified (or 
87a0: 61 6c 6c 29 20 61 72 74 69 66 61 63 74 73 20 61  all) artifacts a
87b0: 73 20 68 61 76 69 6e 67 20 62 65 65 6e 0a 09 09  s having been...
87c0: 6e 6f 74 69 66 69 65 64 20 62 65 66 6f 72 65 2c  notified before,
87d0: 20 74 68 75 73 20 70 72 65 76 65 6e 74 69 6e 67   thus preventing
87e0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 61   generation of a
87f0: 0a 09 09 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20  ...notification 
8800: 66 6f 72 20 74 68 65 6d 20 6f 6e 20 74 68 65 20  for them on the 
8810: 6e 65 78 74 20 69 6e 76 6f 6b 61 74 69 6f 6e 20  next invokation 
8820: 6f 66 0a 09 09 22 6e 6f 74 65 20 64 65 6c 69 76  of..."note deliv
8830: 65 72 22 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20  er"...    }..   
8840: 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79   use .repository
8850: 0a 09 20 20 20 20 75 73 65 20 2e 75 75 69 64 2d  ..    use .uuid-
8860: 6f 72 2d 61 6c 6c 0a 09 7d 20 5b 66 78 3a 3a 63  or-all..} [fx::c
8870: 61 6c 6c 20 6e 6f 74 65 20 6d 61 72 6b 2d 6e 6f  all note mark-no
8880: 74 69 66 69 65 64 5d 0a 0a 09 63 6f 6d 6d 6f 6e  tified]...common
8890: 20 2e 65 78 20 7b 0a 09 20 20 20 20 6f 70 74 69   .ex {..    opti
88a0: 6f 6e 20 65 78 74 65 6e 64 65 64 20 7b 0a 09 09  on extended {...
88b0: 53 68 6f 77 20 65 78 74 65 6e 64 65 64 20 74 79  Show extended ty
88c0: 70 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  pe information. 
88d0: 4e 6f 74 65 20 74 68 61 74 20 75 73 69 6e 67 20  Note that using 
88e0: 74 68 69 73 0a 09 09 6f 70 74 69 6f 6e 20 77 69  this...option wi
88f0: 6c 6c 20 73 75 62 73 74 61 6e 74 69 61 6c 6c 79  ll substantially
8900: 20 73 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e   slow the comman
8910: 64 20 64 6f 77 6e 2c 20 61 73 0a 09 09 69 74 20  d down, as...it 
8920: 68 61 73 20 74 6f 20 70 61 72 73 65 20 61 6c 6c  has to parse all
8930: 20 69 6e 76 6f 6c 76 65 64 20 6d 61 6e 69 66 65   involved manife
8940: 73 74 73 2e 20 54 68 65 20 6c 61 72 67 65 72 0a  sts. The larger.
8950: 09 09 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79  ..the repository
8960: 20 68 69 73 74 6f 72 79 2c 20 74 68 65 20 6c 61   history, the la
8970: 72 67 65 72 20 74 68 65 20 73 6c 6f 77 2d 64 6f  rger the slow-do
8980: 77 6e 2e 0a 09 20 20 20 20 7d 20 7b 20 70 72 65  wn...    } { pre
8990: 73 65 6e 63 65 20 7d 0a 09 7d 0a 0a 09 70 72 69  sence }..}...pri
89a0: 76 61 74 65 20 73 68 6f 77 2d 70 65 6e 64 69 6e  vate show-pendin
89b0: 67 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e  g {..    section
89c0: 20 4e 6f 74 69 66 69 63 61 74 69 6f 6e 73 20 43   Notifications C
89d0: 6f 6e 74 72 6f 6c 0a 09 20 20 20 20 64 65 73 63  ontrol..    desc
89e0: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 53 68 6f 77  ription {...Show
89f0: 20 61 6c 6c 20 65 76 65 6e 74 73 20 69 6e 20 74   all events in t
8a00: 68 65 20 74 69 6d 65 6c 69 6e 65 20 6d 61 72 6b  he timeline mark
8a10: 65 64 20 61 73 20 70 65 6e 64 69 6e 67 2e 0a 09  ed as pending...
8a20: 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e      }..    use .
8a30: 65 78 0a 09 20 20 20 20 75 73 65 20 2e 72 65 70  ex..    use .rep
8a40: 6f 73 69 74 6f 72 79 0a 09 7d 20 5b 66 78 3a 3a  ository..} [fx::
8a50: 63 61 6c 6c 20 6e 6f 74 65 20 73 68 6f 77 2d 70  call note show-p
8a60: 65 6e 64 69 6e 67 5d 0a 0a 09 70 72 69 76 61 74  ending]...privat
8a70: 65 20 73 68 6f 77 2d 6e 6f 74 69 66 69 65 64 20  e show-notified 
8a80: 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 4e  {..    section N
8a90: 6f 74 69 66 69 63 61 74 69 6f 6e 73 20 43 6f 6e  otifications Con
8aa0: 74 72 6f 6c 0a 09 20 20 20 20 64 65 73 63 72 69  trol..    descri
8ab0: 70 74 69 6f 6e 20 7b 0a 09 09 53 68 6f 77 20 61  ption {...Show a
8ac0: 6c 6c 20 65 76 65 6e 74 73 20 69 6e 20 74 68 65  ll events in the
8ad0: 20 74 69 6d 65 6c 69 6e 65 20 6d 61 72 6b 65 64   timeline marked
8ae0: 20 61 73 20 6e 6f 74 69 66 69 65 64 2e 0a 09 20   as notified... 
8af0: 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 65     }..    use .e
8b00: 78 0a 09 20 20 20 20 75 73 65 20 2e 72 65 70 6f  x..    use .repo
8b10: 73 69 74 6f 72 79 0a 09 7d 20 5b 66 78 3a 3a 63  sitory..} [fx::c
8b20: 61 6c 6c 20 6e 6f 74 65 20 73 68 6f 77 2d 6e 6f  all note show-no
8b30: 74 69 66 69 65 64 5d 0a 20 20 20 20 7d 0a 0a 20  tified].    }.. 
8b40: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
8b50: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
8b60: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
8b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8b80: 23 0a 20 20 20 20 23 23 20 50 65 65 72 69 6e 67  #.    ## Peering
8b90: 0a 0a 20 20 20 20 6f 66 66 69 63 65 72 20 70 65  ..    officer pe
8ba0: 65 72 20 7b 0a 09 64 65 73 63 72 69 70 74 69 6f  er {..descriptio
8bb0: 6e 20 7b 0a 09 20 20 20 20 4d 61 6e 61 67 65 6d  n {..    Managem
8bc0: 65 6e 74 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ent of multiple 
8bd0: 70 65 65 72 73 20 66 6f 72 20 72 65 70 6f 73 69  peers for reposi
8be0: 74 6f 72 79 20 73 79 6e 63 68 72 6f 6e 69 7a 61  tory synchroniza
8bf0: 74 69 6f 6e 2e 0a 09 7d 0a 0a 09 63 6f 6d 6d 6f  tion...}...commo
8c00: 6e 20 2a 61 6c 6c 2a 20 2d 65 78 74 65 6e 64 20  n *all* -extend 
8c10: 7b 0a 09 20 20 20 20 75 73 65 20 2e 72 65 70 6f  {..    use .repo
8c20: 73 69 74 6f 72 79 0a 09 7d 0a 0a 09 70 72 69 76  sitory..}...priv
8c30: 61 74 65 20 73 74 61 74 65 20 7b 0a 09 20 20 20  ate state {..   
8c40: 20 73 65 63 74 69 6f 6e 20 50 65 65 72 69 6e 67   section Peering
8c50: 20 43 6f 6e 74 72 6f 6c 0a 09 20 20 20 20 64 65   Control..    de
8c60: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 53 65  scription {...Se
8c70: 74 20 61 6e 64 20 71 75 65 72 79 20 74 68 65 20  t and query the 
8c80: 64 69 72 65 63 74 6f 72 79 20 75 73 65 64 20 74  directory used t
8c90: 6f 20 73 74 6f 72 65 20 74 68 65 0a 09 09 6c 6f  o store the...lo
8ca0: 63 61 6c 20 73 74 61 74 65 20 66 6f 72 20 74 68  cal state for th
8cb0: 65 20 67 69 74 20 70 65 65 72 73 20 6f 66 20 74  e git peers of t
8cc0: 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 0a 09  he repository...
8cd0: 09 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 20  .The default is 
8ce0: 61 20 64 69 72 65 63 74 6f 72 79 20 73 69 62 6c  a directory sibl
8cf0: 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 73 73 69  ing to the fossi
8d00: 6c 0a 09 09 72 65 70 6f 73 69 74 6f 72 79 20 66  l...repository f
8d10: 69 6c 65 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20  ile...    }..   
8d20: 20 69 6e 70 75 74 20 64 69 72 20 7b 0a 09 09 54   input dir {...T
8d30: 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  he directory to 
8d40: 75 73 65 20 66 6f 72 20 67 69 74 20 73 74 61 74  use for git stat
8d50: 65 0a 09 20 20 20 20 7d 20 7b 0a 09 09 6f 70 74  e..    } {...opt
8d60: 69 6f 6e 61 6c 0a 09 09 64 65 66 61 75 6c 74 20  ional...default 
8d70: 7b 7d 0a 09 09 76 61 6c 69 64 61 74 65 20 72 77  {}...validate rw
8d80: 64 69 72 65 63 74 6f 72 79 0a 09 20 20 20 20 7d  directory..    }
8d90: 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 70 65  ..} [fx::call pe
8da0: 65 72 20 73 74 61 74 65 2d 64 69 72 5d 0a 0a 09  er state-dir]...
8db0: 70 72 69 76 61 74 65 20 73 74 61 74 65 2d 72 65  private state-re
8dc0: 73 65 74 20 7b 0a 09 20 20 20 20 73 65 63 74 69  set {..    secti
8dd0: 6f 6e 20 41 64 76 61 6e 63 65 64 20 7b 41 72 6d  on Advanced {Arm
8de0: 65 64 20 26 20 44 61 6e 67 65 72 6f 75 73 7d 20  ed & Dangerous} 
8df0: 50 65 65 72 69 6e 67 0a 09 20 20 20 20 64 65 73  Peering..    des
8e00: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 52 65 73  cription {...Res
8e10: 65 74 73 20 74 68 65 20 75 75 69 64 20 69 6e 66  ets the uuid inf
8e20: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f  ormation used to
8e30: 20 74 72 61 63 6b 20 6e 65 77 20 63 6f 6d 6d 69   track new commi
8e40: 74 73 2e 0a 09 09 54 68 69 73 20 66 6f 72 63 65  ts....This force
8e50: 73 20 61 20 72 65 2d 69 6d 70 6f 72 74 20 6f 66  s a re-import of
8e60: 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20   the repository 
8e70: 69 6e 74 6f 20 74 68 65 20 6c 6f 63 61 6c 0a 09  into the local..
8e80: 09 67 69 74 20 73 74 61 74 65 2c 20 61 6e 64 20  .git state, and 
8e90: 66 75 72 74 68 65 72 20 66 6f 72 63 65 73 20 61  further forces a
8ea0: 20 70 75 73 68 20 74 6f 20 74 68 65 20 67 69 74   push to the git
8eb0: 20 70 65 65 72 73 20 6f 6e 20 74 68 65 0a 09 09   peers on the...
8ec0: 6e 65 78 74 20 69 6e 76 6f 6b 61 74 69 6f 6e 20  next invokation 
8ed0: 6f 66 20 22 70 65 65 72 20 65 78 63 68 61 6e 67  of "peer exchang
8ee0: 65 22 2e 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66  e"...    }..} [f
8ef0: 78 3a 3a 63 61 6c 6c 20 70 65 65 72 20 73 74 61  x::call peer sta
8f00: 74 65 2d 72 65 73 65 74 5d 0a 0a 09 70 72 69 76  te-reset]...priv
8f10: 61 74 65 20 73 74 61 74 65 2d 63 6c 65 61 72 20  ate state-clear 
8f20: 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 41  {..    section A
8f30: 64 76 61 6e 63 65 64 20 7b 41 72 6d 65 64 20 26  dvanced {Armed &
8f40: 20 44 61 6e 67 65 72 6f 75 73 7d 20 50 65 65 72   Dangerous} Peer
8f50: 69 6e 67 0a 09 20 20 20 20 64 65 73 63 72 69 70  ing..    descrip
8f60: 74 69 6f 6e 20 7b 0a 09 09 4c 69 6b 65 20 22 73  tion {...Like "s
8f70: 74 61 74 65 2d 72 65 73 65 74 22 20 62 75 74 20  tate-reset" but 
8f80: 61 64 64 69 74 69 6f 6e 61 6c 6c 79 20 64 69 73  additionally dis
8f90: 63 61 72 64 73 20 74 68 65 20 65 6e 74 69 72 65  cards the entire
8fa0: 0a 09 09 6c 6f 63 61 6c 20 67 69 74 20 73 74 61  ...local git sta
8fb0: 74 65 2c 20 66 6f 72 63 69 6e 67 20 61 20 63 6f  te, forcing a co
8fc0: 6d 70 6c 65 74 65 20 72 65 62 75 69 6c 64 20 6f  mplete rebuild o
8fd0: 6e 20 74 68 65 20 6e 65 78 74 0a 09 09 69 6e 76  n the next...inv
8fe0: 6f 6b 61 74 69 6f 6e 20 6f 66 20 22 70 65 65 72  okation of "peer
8ff0: 20 65 78 63 68 61 6e 67 65 22 2e 0a 09 20 20 20   exchange"...   
9000: 20 7d 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20   }..} [fx::call 
9010: 70 65 65 72 20 73 74 61 74 65 2d 63 6c 65 61 72  peer state-clear
9020: 5d 0a 0a 09 70 72 69 76 61 74 65 20 6c 69 73 74  ]...private list
9030: 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20   {..    section 
9040: 50 65 65 72 69 6e 67 0a 09 20 20 20 20 73 65 63  Peering..    sec
9050: 74 69 6f 6e 20 49 6e 74 72 6f 73 70 65 63 74 69  tion Introspecti
9060: 6f 6e 0a 09 20 20 20 20 64 65 73 63 72 69 70 74  on..    descript
9070: 69 6f 6e 20 7b 0a 09 09 4c 69 73 74 20 61 6c 6c  ion {...List all
9080: 20 70 65 65 72 73 20 73 74 6f 72 65 64 20 69 6e   peers stored in
9090: 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 2c   the repository,
90a0: 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 0a   and associated.
90b0: 09 09 64 65 66 69 6e 69 74 69 6f 6e 73 20 28 77  ..definitions (w
90c0: 68 61 74 20 74 6f 20 73 79 6e 63 68 72 6f 6e 69  hat to synchroni
90d0: 7a 65 2c 20 64 69 72 65 63 74 69 6f 6e 2c 20 74  ze, direction, t
90e0: 79 70 65 20 6f 66 20 70 65 65 72 29 2e 0a 09 20  ype of peer)... 
90f0: 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 70     }..    use .p
9100: 65 65 72 6d 61 70 0a 09 7d 20 5b 66 78 3a 3a 63  eermap..} [fx::c
9110: 61 6c 6c 20 70 65 65 72 20 6c 69 73 74 5d 0a 09  all peer list]..
9120: 64 65 66 61 75 6c 74 0a 0a 09 70 72 69 76 61 74  default...privat
9130: 65 20 65 78 70 6f 72 74 20 7b 0a 09 20 20 20 20  e export {..    
9140: 73 65 63 74 69 6f 6e 20 50 65 65 72 69 6e 67 20  section Peering 
9150: 53 61 76 65 2f 52 65 73 74 6f 72 65 0a 09 20 20  Save/Restore..  
9160: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a    description {.
9170: 09 09 53 61 76 65 20 74 68 65 20 70 65 65 72 69  ..Save the peeri
9180: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  ng information..
9190: 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20  .    }..    use 
91a0: 2e 65 78 70 6f 72 74 0a 09 7d 20 5b 66 78 3a 3a  .export..} [fx::
91b0: 63 61 6c 6c 20 70 65 65 72 20 65 78 70 6f 72 74  call peer export
91c0: 5d 0a 0a 09 70 72 69 76 61 74 65 20 69 6d 70 6f  ]...private impo
91d0: 72 74 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f  rt {..    sectio
91e0: 6e 20 50 65 65 72 69 6e 67 20 53 61 76 65 2f 52  n Peering Save/R
91f0: 65 73 74 6f 72 65 0a 09 20 20 20 20 64 65 73 63  estore..    desc
9200: 72 69 70 74 69 6f 6e 20 7b 0a 09 09 49 6d 70 6f  ription {...Impo
9210: 72 74 20 74 68 65 20 70 65 65 72 69 6e 67 20 69  rt the peering i
9220: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
9230: 61 20 73 61 76 65 20 66 69 6c 65 2e 0a 09 20 20  a save file...  
9240: 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 65 78    }..    use .ex
9250: 74 65 6e 64 0a 09 20 20 20 20 75 73 65 20 2e 69  tend..    use .i
9260: 6d 70 6f 72 74 0a 09 7d 20 5b 66 78 3a 3a 63 61  mport..} [fx::ca
9270: 6c 6c 20 70 65 65 72 20 69 6d 70 6f 72 74 5d 0a  ll peer import].
9280: 0a 09 63 6f 6d 6d 6f 6e 20 2e 64 69 72 65 63 74  ..common .direct
9290: 69 6f 6e 20 7b 0a 09 20 20 20 20 69 6e 70 75 74  ion {..    input
92a0: 20 64 69 72 65 63 74 69 6f 6e 20 7b 0a 09 09 54   direction {...T
92b0: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 6f 66 20  he direction of 
92c0: 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 0a  synchronization.
92d0: 09 20 20 20 20 7d 20 7b 20 76 61 6c 69 64 61 74  .    } { validat
92e0: 65 20 5b 66 78 3a 3a 76 74 20 73 79 6e 63 2d 64  e [fx::vt sync-d
92f0: 69 72 5d 20 7d 0a 09 7d 0a 09 63 6f 6d 6d 6f 6e  ir] }..}..common
9300: 20 2e 61 72 65 61 20 7b 0a 09 20 20 20 20 69 6e   .area {..    in
9310: 70 75 74 20 61 72 65 61 20 7b 0a 09 09 54 68 65  put area {...The
9320: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 61   configuration a
9330: 72 65 61 20 74 6f 20 73 79 6e 63 68 72 6f 6e 69  rea to synchroni
9340: 7a 65 0a 09 20 20 20 20 7d 20 7b 20 76 61 6c 69  ze..    } { vali
9350: 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 63 6f 6e  date [fx::vt con
9360: 66 69 67 2d 61 72 65 61 5d 20 7d 0a 09 7d 0a 09  fig-area] }..}..
9370: 63 6f 6d 6d 6f 6e 20 2e 70 65 65 72 2d 66 6f 73  common .peer-fos
9380: 73 69 6c 20 7b 0a 09 20 20 20 20 69 6e 70 75 74  sil {..    input
9390: 20 70 65 65 72 20 7b 0a 09 09 54 68 65 20 66 6f   peer {...The fo
93a0: 73 73 69 6c 20 70 65 65 72 20 74 6f 20 74 61 6c  ssil peer to tal
93b0: 6b 20 74 6f 2e 0a 09 20 20 20 20 7d 20 7b 20 76  k to...    } { v
93c0: 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74 20  alidate [fx::vt 
93d0: 70 65 65 72 2d 66 6f 73 73 69 6c 5d 20 7d 0a 09  peer-fossil] }..
93e0: 7d 0a 09 63 6f 6d 6d 6f 6e 20 2e 70 65 65 72 2d  }..common .peer-
93f0: 67 69 74 20 7b 0a 09 20 20 20 20 69 6e 70 75 74  git {..    input
9400: 20 70 65 65 72 20 7b 0a 09 09 54 68 65 20 67 69   peer {...The gi
9410: 74 20 70 65 65 72 20 74 6f 20 74 61 6c 6b 20 74  t peer to talk t
9420: 6f 2e 0a 09 20 20 20 20 7d 20 7b 20 76 61 6c 69  o...    } { vali
9430: 64 61 74 65 20 5b 66 78 3a 3a 76 74 20 70 65 65  date [fx::vt pee
9440: 72 2d 67 69 74 5d 20 7d 0a 09 7d 0a 09 63 6f 6d  r-git] }..}..com
9450: 6d 6f 6e 20 2e 6e 6f 74 2d 70 65 65 72 2d 66 6f  mon .not-peer-fo
9460: 73 73 69 6c 20 7b 0a 09 20 20 20 20 69 6e 70 75  ssil {..    inpu
9470: 74 20 70 65 65 72 20 7b 0a 09 09 54 68 65 20 66  t peer {...The f
9480: 6f 73 73 69 6c 20 70 65 65 72 20 74 6f 20 74 61  ossil peer to ta
9490: 6c 6b 20 74 6f 2e 0a 09 20 20 20 20 7d 20 7b 20  lk to...    } { 
94a0: 76 61 6c 69 64 61 74 65 20 5b 66 78 3a 3a 76 74  validate [fx::vt
94b0: 20 6e 6f 74 2d 70 65 65 72 2d 66 6f 73 73 69 6c   not-peer-fossil
94c0: 5d 20 7d 0a 09 7d 0a 09 63 6f 6d 6d 6f 6e 20 2e  ] }..}..common .
94d0: 6e 6f 74 2d 70 65 65 72 2d 67 69 74 20 7b 0a 09  not-peer-git {..
94e0: 20 20 20 20 69 6e 70 75 74 20 70 65 65 72 20 7b      input peer {
94f0: 0a 09 09 54 68 65 20 67 69 74 20 70 65 65 72 20  ...The git peer 
9500: 74 6f 20 74 61 6c 6b 20 74 6f 2e 0a 09 20 20 20  to talk to...   
9510: 20 7d 20 7b 20 76 61 6c 69 64 61 74 65 20 5b 66   } { validate [f
9520: 78 3a 3a 76 74 20 6e 6f 74 2d 70 65 65 72 2d 67  x::vt not-peer-g
9530: 69 74 5d 20 7d 0a 09 7d 0a 0a 09 70 72 69 76 61  it] }..}...priva
9540: 74 65 20 61 64 64 20 7b 0a 09 20 20 20 20 73 65  te add {..    se
9550: 63 74 69 6f 6e 20 50 65 65 72 69 6e 67 20 43 6f  ction Peering Co
9560: 6e 74 72 6f 6c 0a 09 20 20 20 20 64 65 73 63 72  ntrol..    descr
9570: 69 70 74 69 6f 6e 20 7b 0a 09 09 41 64 64 20 64  iption {...Add d
9580: 69 72 65 63 74 69 6f 6e 20 61 6e 64 20 61 72 65  irection and are
9590: 61 20 6f 66 20 65 78 63 68 61 6e 67 65 20 66 6f  a of exchange fo
95a0: 72 20 61 20 66 6f 73 73 69 6c 20 70 65 65 72 2e  r a fossil peer.
95b0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65  ..    }..    use
95c0: 20 2e 64 69 72 65 63 74 69 6f 6e 0a 09 20 20 20   .direction..   
95d0: 20 75 73 65 20 2e 61 72 65 61 0a 09 20 20 20 20   use .area..    
95e0: 75 73 65 20 2e 6e 6f 74 2d 70 65 65 72 2d 66 6f  use .not-peer-fo
95f0: 73 73 69 6c 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c  ssil..} [fx::cal
9600: 6c 20 70 65 65 72 20 61 64 64 5d 0a 0a 09 70 72  l peer add]...pr
9610: 69 76 61 74 65 20 72 65 6d 6f 76 65 20 7b 0a 09  ivate remove {..
9620: 20 20 20 20 73 65 63 74 69 6f 6e 20 50 65 65 72      section Peer
9630: 69 6e 67 20 43 6f 6e 74 72 6f 6c 0a 09 20 20 20  ing Control..   
9640: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09   description {..
9650: 09 41 64 64 20 64 69 72 65 63 74 69 6f 6e 20 61  .Add direction a
9660: 6e 64 20 61 72 65 61 20 6f 66 20 65 78 63 68 61  nd area of excha
9670: 6e 67 65 20 66 6f 72 20 61 20 66 6f 73 73 69 6c  nge for a fossil
9680: 20 70 65 65 72 2e 0a 09 20 20 20 20 7d 0a 09 20   peer...    }.. 
9690: 20 20 20 75 73 65 20 2e 64 69 72 65 63 74 69 6f     use .directio
96a0: 6e 0a 09 20 20 20 20 75 73 65 20 2e 61 72 65 61  n..    use .area
96b0: 0a 09 20 20 20 20 75 73 65 20 2e 70 65 65 72 2d  ..    use .peer-
96c0: 66 6f 73 73 69 6c 0a 09 7d 20 5b 66 78 3a 3a 63  fossil..} [fx::c
96d0: 61 6c 6c 20 70 65 65 72 20 72 65 6d 6f 76 65 5d  all peer remove]
96e0: 0a 0a 09 70 72 69 76 61 74 65 20 61 64 64 2d 67  ...private add-g
96f0: 69 74 20 7b 0a 09 20 20 20 20 73 65 63 74 69 6f  it {..    sectio
9700: 6e 20 50 65 65 72 69 6e 67 20 43 6f 6e 74 72 6f  n Peering Contro
9710: 6c 0a 09 20 20 20 20 64 65 73 63 72 69 70 74 69  l..    descripti
9720: 6f 6e 20 7b 0a 09 09 41 64 64 20 65 78 70 6f 72  on {...Add expor
9730: 74 20 74 6f 20 61 20 67 69 74 20 70 65 65 72 2e  t to a git peer.
9740: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65  ..    }..    use
9750: 20 2e 6e 6f 74 2d 70 65 65 72 2d 67 69 74 0a 09   .not-peer-git..
9760: 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 70 65 65 72  } [fx::call peer
9770: 20 61 64 64 2d 67 69 74 5d 0a 0a 09 70 72 69 76   add-git]...priv
9780: 61 74 65 20 72 65 6d 6f 76 65 2d 67 69 74 20 7b  ate remove-git {
9790: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 50 65  ..    section Pe
97a0: 65 72 69 6e 67 20 43 6f 6e 74 72 6f 6c 0a 09 20  ering Control.. 
97b0: 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b     description {
97c0: 0a 09 09 52 65 6d 6f 76 65 20 65 78 70 6f 72 74  ...Remove export
97d0: 20 74 6f 20 61 20 67 69 74 20 70 65 65 72 2e 0a   to a git peer..
97e0: 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20  .    }..    use 
97f0: 2e 70 65 65 72 2d 67 69 74 0a 09 7d 20 5b 66 78  .peer-git..} [fx
9800: 3a 3a 63 61 6c 6c 20 70 65 65 72 20 72 65 6d 6f  ::call peer remo
9810: 76 65 2d 67 69 74 5d 0a 0a 09 70 72 69 76 61 74  ve-git]...privat
9820: 65 20 65 78 63 68 61 6e 67 65 20 7b 0a 09 20 20  e exchange {..  
9830: 20 20 73 65 63 74 69 6f 6e 20 50 65 65 72 69 6e    section Peerin
9840: 67 0a 09 20 20 20 20 64 65 73 63 72 69 70 74 69  g..    descripti
9850: 6f 6e 20 7b 0a 09 09 52 75 6e 20 61 20 64 61 74  on {...Run a dat
9860: 61 20 65 78 63 68 61 6e 67 65 20 77 69 74 68 20  a exchange with 
9870: 61 6c 6c 20 63 6f 6e 66 69 67 75 72 65 64 20 70  all configured p
9880: 65 65 72 73 0a 09 20 20 20 20 7d 0a 09 20 20 20  eers..    }..   
9890: 20 75 73 65 20 2e 70 65 65 72 6d 61 70 0a 09 7d   use .peermap..}
98a0: 20 5b 66 78 3a 3a 63 61 6c 6c 20 70 65 65 72 20   [fx::call peer 
98b0: 65 78 63 68 61 6e 67 65 5d 0a 20 20 20 20 7d 0a  exchange].    }.
98c0: 20 20 20 20 61 6c 69 61 73 20 70 65 65 72 73 20      alias peers 
98d0: 3d 20 70 65 65 72 20 6c 69 73 74 0a 0a 20 20 20  = peer list..   
98e0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
98f0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
9900: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
9910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
9920: 20 20 20 20 23 23 20 53 68 75 6e 20 6d 61 6e 61      ## Shun mana
9930: 67 65 6d 65 6e 74 0a 0a 20 20 20 20 6f 66 66 69  gement..    offi
9940: 63 65 72 20 73 68 75 6e 20 7b 0a 09 64 65 73 63  cer shun {..desc
9950: 72 69 70 74 69 6f 6e 20 7b 0a 09 20 20 20 20 44  ription {..    D
9960: 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 61 64 76  angerous and adv
9970: 61 6e 63 65 64 20 63 6f 6d 6d 61 6e 64 73 20 74  anced commands t
9980: 6f 20 6d 61 6e 69 70 75 6c 61 74 65 20 74 68 65  o manipulate the
9990: 20 6c 69 73 74 0a 09 20 20 20 20 6f 66 20 73 68   list..    of sh
99a0: 75 6e 6e 65 64 20 61 72 74 69 66 61 63 74 73 20  unned artifacts 
99b0: 69 6e 20 62 75 6c 6b 2e 0a 09 7d 0a 09 23 20 54  in bulk...}..# T
99c0: 4f 44 4f 3a 20 74 65 73 74 73 75 69 74 65 2e 0a  ODO: testsuite..
99d0: 0a 09 63 6f 6d 6d 6f 6e 20 2a 61 6c 6c 2a 20 2d  ..common *all* -
99e0: 65 78 74 65 6e 64 20 7b 0a 09 20 20 20 20 73 65  extend {..    se
99f0: 63 74 69 6f 6e 20 41 64 76 61 6e 63 65 64 20 7b  ction Advanced {
9a00: 41 72 6d 65 64 20 26 20 44 61 6e 67 65 72 6f 75  Armed & Dangerou
9a10: 73 7d 20 53 68 75 6e 6e 69 6e 67 0a 09 20 20 20  s} Shunning..   
9a20: 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79   use .repository
9a30: 0a 09 7d 0a 0a 09 70 72 69 76 61 74 65 20 6c 69  ..}...private li
9a40: 73 74 20 7b 0a 09 20 20 20 20 64 65 73 63 72 69  st {..    descri
9a50: 70 74 69 6f 6e 20 7b 0a 09 09 53 68 6f 77 20 74  ption {...Show t
9a60: 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 73  he list of all s
9a70: 68 75 6e 6e 65 64 20 61 72 74 69 66 61 63 74 73  hunned artifacts
9a80: 2e 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a  ...    }..} [fx:
9a90: 3a 63 61 6c 6c 20 73 68 75 6e 20 6c 69 73 74 5d  :call shun list]
9aa0: 0a 0a 09 70 72 69 76 61 74 65 20 61 64 64 20 7b  ...private add {
9ab0: 0a 09 20 20 20 20 64 65 73 63 72 69 70 74 69 6f  ..    descriptio
9ac0: 6e 20 7b 0a 09 09 53 68 75 6e 20 61 72 74 69 66  n {...Shun artif
9ad0: 61 63 74 73 2e 0a 09 20 20 20 20 7d 0a 09 20 20  acts...    }..  
9ae0: 20 20 75 73 65 20 2e 75 75 69 64 2d 6c 65 78 2d    use .uuid-lex-
9af0: 6c 69 73 74 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c  list..} [fx::cal
9b00: 6c 20 73 68 75 6e 20 61 64 64 5d 0a 0a 09 70 72  l shun add]...pr
9b10: 69 76 61 74 65 20 72 65 6d 6f 76 65 20 7b 0a 09  ivate remove {..
9b20: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20      description 
9b30: 7b 0a 09 09 52 65 61 63 63 65 70 74 20 61 72 74  {...Reaccept art
9b40: 69 66 61 63 74 73 20 77 68 69 63 68 20 68 61 76  ifacts which hav
9b50: 65 20 62 65 65 6e 20 73 68 75 6e 6e 65 64 2e 0a  e been shunned..
9b60: 09 20 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20  .    }..    use 
9b70: 2e 75 75 69 64 2d 6c 65 78 2d 6c 69 73 74 0a 09  .uuid-lex-list..
9b80: 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 73 68 75 6e  } [fx::call shun
9b90: 20 72 65 6d 6f 76 65 5d 0a 20 20 20 20 7d 0a 20   remove].    }. 
9ba0: 20 20 20 61 6c 69 61 73 20 73 68 75 6e 6e 65 64     alias shunned
9bb0: 20 3d 20 73 68 75 6e 20 6c 69 73 74 0a 0a 20 20   = shun list..  
9bc0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
9bd0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
9be0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
9bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c00: 0a 20 20 20 20 23 23 20 44 65 76 65 6c 6f 70 65  .    ## Develope
9c10: 72 20 73 75 70 70 6f 72 74 2c 20 66 65 61 74 75  r support, featu
9c20: 72 65 20 74 65 73 74 20 61 6e 64 20 72 65 70 6f  re test and repo
9c30: 73 69 74 6f 72 79 20 69 6e 73 70 65 63 74 69 6f  sitory inspectio
9c40: 6e 2e 0a 0a 20 20 20 20 6f 66 66 69 63 65 72 20  n...    officer 
9c50: 74 65 73 74 20 7b 0a 09 64 65 73 63 72 69 70 74  test {..descript
9c60: 69 6f 6e 20 7b 0a 09 20 20 20 20 56 61 72 69 6f  ion {..    Vario
9c70: 75 73 20 63 6f 6d 6d 61 6e 64 73 20 74 6f 20 74  us commands to t
9c80: 65 73 74 20 74 68 65 20 73 79 73 74 65 6d 20 61  est the system a
9c90: 6e 64 20 69 74 73 20 63 6f 6e 66 69 67 75 72 61  nd its configura
9ca0: 74 69 6f 6e 2e 0a 09 7d 0a 09 63 6f 6d 6d 6f 6e  tion...}..common
9cb0: 20 2a 61 6c 6c 2a 20 2d 65 78 74 65 6e 64 20 7b   *all* -extend {
9cc0: 0a 09 20 20 20 20 73 65 63 74 69 6f 6e 20 41 64  ..    section Ad
9cd0: 76 61 6e 63 65 64 20 54 65 73 74 69 6e 67 0a 09  vanced Testing..
9ce0: 20 20 20 20 23 20 57 65 20 64 6f 20 6e 6f 74 20      # We do not 
9cf0: 68 61 76 65 20 75 73 65 20 2e 72 65 70 6f 73 69  have use .reposi
9d00: 74 6f 72 79 20 68 65 72 65 20 62 65 63 61 75 73  tory here becaus
9d10: 65 20 74 68 65 0a 09 20 20 20 20 23 20 27 6d 61  e the..    # 'ma
9d20: 69 6c 2d 61 64 64 72 65 73 73 27 20 63 6f 6d 6d  il-address' comm
9d30: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 75 73 65  and does not use
9d40: 20 69 74 20 63 6f 6e 74 72 61 72 79 0a 09 20 20   it contrary..  
9d50: 20 20 23 20 74 6f 20 61 6c 6c 20 6f 74 68 65 72    # to all other
9d60: 73 2e 0a 09 7d 0a 0a 09 70 72 69 76 61 74 65 20  s...}...private 
9d70: 6d 61 69 6c 2d 61 64 64 72 65 73 73 20 7b 0a 09  mail-address {..
9d80: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20      description 
9d90: 7b 0a 09 09 50 61 72 73 65 20 74 68 65 20 73 70  {...Parse the sp
9da0: 65 63 69 66 69 65 64 20 61 64 64 72 65 73 73 20  ecified address 
9db0: 69 6e 74 6f 20 70 61 72 74 73 2c 20 61 6e 64 20  into parts, and 
9dc0: 64 65 74 65 72 6d 69 6e 65 0a 09 09 69 66 20 69  determine...if i
9dd0: 74 20 69 73 20 6c 65 78 69 63 61 6c 6c 79 20 6f  t is lexically o
9de0: 6b 20 66 6f 72 20 75 73 2c 20 6f 72 20 6e 6f 74  k for us, or not
9df0: 2c 20 61 6e 64 20 77 68 79 20 6e 6f 74 20 69 6e  , and why not in
9e00: 0a 09 09 63 61 73 65 20 6f 66 20 74 68 65 20 6c  ...case of the l
9e10: 61 74 74 65 72 2e 0a 09 20 20 20 20 7d 0a 09 20  atter...    }.. 
9e20: 20 20 20 69 6e 70 75 74 20 61 64 64 72 65 73 73     input address
9e30: 20 7b 0a 09 09 54 68 65 20 61 64 64 72 65 73 73   {...The address
9e40: 20 74 6f 20 70 61 72 73 65 20 61 6e 64 20 74 65   to parse and te
9e50: 73 74 2e 0a 09 20 20 20 20 7d 20 7b 20 7d 0a 09  st...    } { }..
9e60: 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 6d 61 69 6c  } [fx::call mail
9e70: 65 72 20 74 65 73 74 2d 61 64 64 72 65 73 73 5d  er test-address]
9e80: 0a 0a 09 70 72 69 76 61 74 65 20 6d 61 69 6c 2d  ...private mail-
9e90: 73 65 74 75 70 20 7b 0a 09 20 20 20 20 64 65 73  setup {..    des
9ea0: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 47 65 6e  cription {...Gen
9eb0: 65 72 61 74 65 20 61 20 74 65 73 74 20 6d 61 69  erate a test mai
9ec0: 6c 20 61 6e 64 20 73 65 6e 64 20 69 74 20 75 73  l and send it us
9ed0: 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 0a  ing the current.
9ee0: 09 09 6d 61 69 6c 20 63 6f 6e 66 69 67 75 72 61  ..mail configura
9ef0: 74 69 6f 6e 2e 0a 09 20 20 20 20 7d 0a 09 20 20  tion...    }..  
9f00: 20 20 75 73 65 20 2e 72 65 70 6f 73 69 74 6f 72    use .repositor
9f10: 79 0a 09 20 20 20 20 69 6e 70 75 74 20 64 65 73  y..    input des
9f20: 74 69 6e 61 74 69 6f 6e 20 7b 0a 09 09 54 68 65  tination {...The
9f30: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 64 64   destination add
9f40: 72 65 73 73 20 74 6f 20 73 65 6e 64 20 74 68 65  ress to send the
9f50: 20 74 65 73 74 20 6d 61 69 6c 20 74 6f 2e 0a 09   test mail to...
9f60: 20 20 20 20 7d 20 7b 20 7d 0a 09 7d 20 5b 66 78      } { }..} [fx
9f70: 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20 74 65 73 74  ::call note test
9f80: 2d 6d 61 69 6c 2d 63 6f 6e 66 69 67 5d 0a 0a 09  -mail-config]...
9f90: 70 72 69 76 61 74 65 20 6d 61 69 6c 2d 66 6f 72  private mail-for
9fa0: 20 7b 0a 09 20 20 20 20 64 65 73 63 72 69 70 74   {..    descript
9fb0: 69 6f 6e 20 7b 0a 09 09 47 65 6e 65 72 61 74 65  ion {...Generate
9fc0: 20 74 68 65 20 6e 6f 74 69 66 69 63 61 74 69 6f   the notificatio
9fd0: 6e 20 6d 61 69 6c 20 66 6f 72 20 74 68 65 20 73  n mail for the s
9fe0: 70 65 63 69 66 69 65 64 20 61 72 74 69 66 61 63  pecified artifac
9ff0: 74 2c 0a 09 09 61 6e 64 20 70 72 69 6e 74 20 69  t,...and print i
a000: 74 20 74 6f 20 73 74 64 6f 75 74 2e 0a 09 20 20  t to stdout...  
a010: 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 72 65    }..    use .re
a020: 70 6f 73 69 74 6f 72 79 0a 09 20 20 20 20 75 73  pository..    us
a030: 65 20 2e 75 75 69 64 2d 6f 72 2d 61 6c 6c 0a 09  e .uuid-or-all..
a040: 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 6e 6f 74 65  } [fx::call note
a050: 20 74 65 73 74 2d 6d 61 69 6c 2d 67 65 6e 5d 0a   test-mail-gen].
a060: 0a 09 70 72 69 76 61 74 65 20 6d 61 69 6c 2d 72  ..private mail-r
a070: 65 63 65 69 76 65 72 73 20 7b 0a 09 20 20 20 20  eceivers {..    
a080: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09  description {...
a090: 41 6e 61 6c 79 73 65 20 74 68 65 20 73 70 65 63  Analyse the spec
a0a0: 69 66 69 65 64 20 61 72 74 69 66 61 63 74 20 61  ified artifact a
a0b0: 6e 64 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  nd determine the
a0c0: 20 73 65 74 0a 09 09 6f 66 20 6d 61 69 6c 20 61   set...of mail a
a0d0: 64 64 72 65 73 73 65 73 20 74 6f 20 73 65 6e 64  ddresses to send
a0e0: 20 61 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20   a notification 
a0f0: 74 6f 2c 20 66 69 78 65 64 0a 09 09 61 6e 64 20  to, fixed...and 
a100: 66 69 65 6c 64 2d 62 61 73 65 64 2e 0a 09 20 20  field-based...  
a110: 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 72 65    }..    use .re
a120: 70 6f 73 69 74 6f 72 79 0a 09 20 20 20 20 75 73  pository..    us
a130: 65 20 2e 75 75 69 64 2d 6f 72 2d 61 6c 6c 0a 09  e .uuid-or-all..
a140: 20 20 20 20 75 73 65 20 2e 72 6f 75 74 65 6d 61      use .routema
a150: 70 0a 09 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 6e  p..} [fx::call n
a160: 6f 74 65 20 74 65 73 74 2d 6d 61 69 6c 2d 72 65  ote test-mail-re
a170: 63 65 69 76 65 72 73 5d 0a 0a 09 70 72 69 76 61  ceivers]...priva
a180: 74 65 20 6d 61 6e 69 66 65 73 74 2d 70 61 72 73  te manifest-pars
a190: 65 20 7b 0a 09 20 20 20 20 64 65 73 63 72 69 70  e {..    descrip
a1a0: 74 69 6f 6e 20 7b 0a 09 09 50 61 72 73 65 20 74  tion {...Parse t
a1b0: 68 65 20 73 70 65 63 69 66 69 65 64 20 61 72 74  he specified art
a1c0: 69 66 61 63 74 20 61 73 20 6d 61 6e 69 66 65 73  ifact as manifes
a1d0: 74 20 61 6e 64 20 70 72 69 6e 74 20 74 68 65 0a  t and print the.
a1e0: 09 09 72 65 73 75 6c 74 69 6e 67 20 61 72 72 61  ..resulting arra
a1f0: 79 2f 64 69 63 74 69 6f 6e 61 72 79 20 74 6f 20  y/dictionary to 
a200: 73 74 64 6f 75 74 2e 0a 09 20 20 20 20 7d 0a 09  stdout...    }..
a210: 20 20 20 20 75 73 65 20 2e 72 65 70 6f 73 69 74      use .reposit
a220: 6f 72 79 0a 09 20 20 20 20 75 73 65 20 2e 75 75  ory..    use .uu
a230: 69 64 2d 6f 72 2d 61 6c 6c 0a 09 7d 20 5b 66 78  id-or-all..} [fx
a240: 3a 3a 63 61 6c 6c 20 6e 6f 74 65 20 74 65 73 74  ::call note test
a250: 2d 70 61 72 73 65 5d 0a 0a 09 70 72 69 76 61 74  -parse]...privat
a260: 65 20 74 61 67 73 20 7b 0a 09 20 20 20 20 64 65  e tags {..    de
a270: 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09 44 65  scription {...De
a280: 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65  termine the name
a290: 73 2c 20 74 79 70 65 73 2c 20 61 6e 64 20 76 61  s, types, and va
a2a0: 6c 75 65 73 20 6f 66 20 61 6c 6c 20 74 61 67 73  lues of all tags
a2b0: 0a 09 09 61 73 73 6f 63 69 61 74 65 64 20 77 69  ...associated wi
a2c0: 74 68 20 61 20 63 68 65 63 6b 69 6e 2e 0a 09 20  th a checkin... 
a2d0: 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 72     }..    use .r
a2e0: 65 70 6f 73 69 74 6f 72 79 0a 09 20 20 20 20 75  epository..    u
a2f0: 73 65 20 2e 75 75 69 64 0a 09 7d 20 5b 66 78 3a  se .uuid..} [fx:
a300: 3a 63 61 6c 6c 20 66 6f 73 73 69 6c 20 74 65 73  :call fossil tes
a310: 74 2d 74 61 67 73 5d 0a 0a 09 70 72 69 76 61 74  t-tags]...privat
a320: 65 20 62 72 61 6e 63 68 20 7b 0a 09 20 20 20 20  e branch {..    
a330: 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a 09 09  description {...
a340: 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62 72  Determine the br
a350: 61 6e 63 68 20 6f 66 20 61 20 63 68 65 63 6b 69  anch of a checki
a360: 6e 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75  n...    }..    u
a370: 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09  se .repository..
a380: 20 20 20 20 75 73 65 20 2e 75 75 69 64 0a 09 7d      use .uuid..}
a390: 20 5b 66 78 3a 3a 63 61 6c 6c 20 66 6f 73 73 69   [fx::call fossi
a3a0: 6c 20 74 65 73 74 2d 62 72 61 6e 63 68 5d 0a 0a  l test-branch]..
a3b0: 09 70 72 69 76 61 74 65 20 6c 61 73 74 2d 75 75  .private last-uu
a3c0: 69 64 20 7b 0a 09 20 20 20 20 64 65 73 63 72 69  id {..    descri
a3d0: 70 74 69 6f 6e 20 7b 0a 09 09 44 65 74 65 72 6d  ption {...Determ
a3e0: 69 6e 65 20 74 68 65 20 75 75 69 64 20 6f 66 20  ine the uuid of 
a3f0: 74 68 65 20 6c 61 73 74 20 63 6f 6d 6d 69 74 20  the last commit 
a400: 28 6f 6e 20 61 6e 79 20 62 72 61 6e 63 68 29 2e  (on any branch).
a410: 0a 09 09 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ...In other word
a420: 73 2c 20 74 68 65 20 75 75 69 64 20 6f 66 20 74  s, the uuid of t
a430: 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20 74 69  he repository ti
a440: 70 2e 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75  p...    }..    u
a450: 73 65 20 2e 72 65 70 6f 73 69 74 6f 72 79 0a 09  se .repository..
a460: 7d 20 5b 66 78 3a 3a 63 61 6c 6c 20 66 6f 73 73  } [fx::call foss
a470: 69 6c 20 74 65 73 74 2d 6c 61 73 74 2d 75 75 69  il test-last-uui
a480: 64 5d 0a 09 61 6c 69 61 73 20 74 69 70 20 3d 20  d]..alias tip = 
a490: 6c 61 73 74 2d 75 75 69 64 0a 0a 09 70 72 69 76  last-uuid...priv
a4a0: 61 74 65 20 73 63 68 65 6d 61 20 7b 0a 09 20 20  ate schema {..  
a4b0: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a    description {.
a4c0: 09 09 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20  ..Determine the 
a4d0: 61 75 78 2d 73 63 68 65 6d 61 20 6f 66 20 74 68  aux-schema of th
a4e0: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 0a 09 20  e repository... 
a4f0: 20 20 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 72     }..    use .r
a500: 65 70 6f 73 69 74 6f 72 79 0a 09 7d 20 5b 66 78  epository..} [fx
a510: 3a 3a 63 61 6c 6c 20 66 6f 73 73 69 6c 20 74 65  ::call fossil te
a520: 73 74 2d 73 63 68 65 6d 61 5d 0a 0a 09 70 72 69  st-schema]...pri
a530: 76 61 74 65 20 6d 6c 69 6e 6b 20 7b 0a 09 20 20  vate mlink {..  
a540: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 7b 0a    description {.
a550: 09 09 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20  ..Determine the 
a560: 73 74 61 74 65 20 6f 66 20 74 68 65 20 6d 6c 69  state of the mli
a570: 6e 6b 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  nk table in the 
a580: 72 65 70 6f 73 69 74 6f 72 79 2e 0a 09 20 20 20  repository...   
a590: 20 7d 0a 09 20 20 20 20 75 73 65 20 2e 72 65 70   }..    use .rep
a5a0: 6f 73 69 74 6f 72 79 0a 09 7d 20 5b 66 78 3a 3a  ository..} [fx::
a5b0: 63 61 6c 6c 20 66 6f 73 73 69 6c 20 74 65 73 74  call fossil test
a5c0: 2d 6d 6c 69 6e 6b 5d 0a 20 20 20 20 7d 0a 0a 20  -mlink].    }.. 
a5d0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
a5e0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
a5f0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
a600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a610: 23 0a 20 20 20 20 23 23 20 44 65 76 65 6c 6f 70  #.    ## Develop
a620: 65 72 20 73 75 70 70 6f 72 74 2c 20 64 65 62 75  er support, debu
a630: 67 67 69 6e 67 2e 0a 0a 20 20 20 20 6f 66 66 69  gging...    offi
a640: 63 65 72 20 64 65 62 75 67 20 7b 0a 09 64 65 73  cer debug {..des
a650: 63 72 69 70 74 69 6f 6e 20 7b 0a 09 20 20 20 20  cription {..    
a660: 56 61 72 69 6f 75 73 20 63 6f 6d 6d 61 6e 64 73  Various commands
a670: 20 74 6f 20 68 65 6c 70 20 64 65 62 75 67 67 69   to help debuggi
a680: 6e 67 20 74 68 65 20 73 79 73 74 65 6d 20 69 74  ng the system it
a690: 73 65 6c 66 0a 09 20 20 20 20 61 6e 64 20 69 74  self..    and it
a6a0: 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  s configuration.
a6b0: 0a 09 7d 0a 09 63 6f 6d 6d 6f 6e 20 2a 61 6c 6c  ..}..common *all
a6c0: 2a 20 2d 65 78 74 65 6e 64 20 7b 0a 09 20 20 20  * -extend {..   
a6d0: 20 73 65 63 74 69 6f 6e 20 41 64 76 61 6e 63 65   section Advance
a6e0: 64 20 44 65 62 75 67 67 69 6e 67 0a 09 7d 0a 0a  d Debugging..}..
a6f0: 09 70 72 69 76 61 74 65 20 6c 65 76 65 6c 73 20  .private levels 
a700: 7b 0a 09 20 20 20 20 64 65 73 63 72 69 70 74 69  {..    descripti
a710: 6f 6e 20 7b 0a 09 09 4c 69 73 74 20 61 6c 6c 20  on {...List all 
a720: 74 68 65 20 64 65 62 75 67 20 6c 65 76 65 6c 73  the debug levels
a730: 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 73 79   known to the sy
a740: 73 74 65 6d 2c 0a 09 09 77 68 69 63 68 20 77 65  stem,...which we
a750: 20 63 61 6e 20 65 6e 61 62 6c 65 20 74 6f 20 67   can enable to g
a760: 61 69 6e 20 61 20 28 70 61 72 74 69 61 6c 29 20  ain a (partial) 
a770: 6e 61 72 72 61 74 69 76 65 0a 09 09 6f 66 20 74  narrative...of t
a780: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 69  he application-i
a790: 6e 74 65 72 6e 61 6c 20 61 63 74 69 6f 6e 73 2e  nternal actions.
a7a0: 0a 09 20 20 20 20 7d 0a 09 7d 20 5b 66 78 3a 3a  ..    }..} [fx::
a7b0: 63 61 6c 6c 20 64 65 62 75 67 20 6c 65 76 65 6c  call debug level
a7c0: 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  s].    }..    # 
a7d0: 53 68 6f 72 74 63 75 74 0a 20 20 20 20 61 6c 69  Shortcut.    ali
a7e0: 61 73 20 74 69 63 6b 65 74 2d 66 69 65 6c 64 73  as ticket-fields
a7f0: 20 3d 20 6e 6f 74 65 20 72 6f 75 74 65 20 66 69   = note route fi
a800: 65 6c 64 20 6c 69 73 74 0a 20 20 20 20 23 20 61  eld list.    # a
a810: 6b 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ka              
a820: 20 20 20 6e 6f 74 65 20 72 6f 75 74 65 20 66 69     note route fi
a830: 65 6c 64 73 0a 7d 0a 0a 23 20 23 20 23 23 20 23  elds.}..# # ## #
a840: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
a850: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
a860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a870: 23 23 23 23 23 23 0a 23 23 20 41 64 64 20 64 65  ######.## Add de
a880: 6c 65 67 61 74 69 6f 6e 73 2e 0a 0a 66 78 3a 3a  legations...fx::
a890: 6f 76 65 72 6c 61 79 20 7b 7d 0a 66 78 3a 3a 6f  overlay {}.fx::o
a8a0: 76 65 72 6c 61 79 20 75 73 65 72 20 75 73 65 72  verlay user user
a8b0: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
a8c0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
a8d0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
a8e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a8f0: 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65  .package provide
a900: 20 66 78 20 30 0a 72 65 74 75 72 6e 0a            fx 0.return.