Hex Artifact Content
Not logged in

Artifact 85e459979d30e958b996376a5ab29567b798d1e4:

File src/branch.c part of check-in [b6e22e62cf] - Attempting to rationalize the tagging and branching logic. The "branch" command has been resurrected and appears to work now. The "tag branch" command has been removed. Special tags "newbranch" and "closed" used to manage branches. New changes are not well-tested - use with caution. You must "rebuild" when upgrading through this version. by drh on 2009-01-20 16:51:19.

0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 37 20 44 2e 20 52 69 63 68  (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54  ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62   GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76  lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c  ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65  ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73  s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20  tributed in the 
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c  hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20  l be useful,.** 
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20  but WITHOUT ANY 
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75  WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69  t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a  ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54  * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52  Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55   A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20  RPOSE.  See the 
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50  GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f  ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a  r more details..
01e0: 2a 2a 20 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c  ** .** You shoul
01f0: 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20  d have received 
0200: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e  a copy of the GN
0210: 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63  U General Public
0220: 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e  .** License alon
0230: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72  g with this libr
0240: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69  ary; if not, wri
0250: 74 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65  te to the.** Fre
0260: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
0270: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20  ation, Inc., 59 
0280: 54 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53  Temple Place - S
0290: 75 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73  uite 330,.** Bos
02a0: 74 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31  ton, MA  02111-1
02b0: 33 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20  307, USA..**.** 
02c0: 41 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69  Author contact i
02d0: 6e 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20  nformation:.**  
02e0: 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a   drh@hwaci.com.*
02f0: 2a 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68  *   http://www.h
0300: 77 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a  waci.com/drh/.**
0310: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
0320: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0360: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65  .**.** This file
0370: 20 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75   contains code u
0380: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 6e 65  sed to create ne
0390: 77 20 62 72 61 6e 63 68 65 73 20 77 69 74 68 69  w branches withi
03a0: 6e 20 61 20 72 65 70 6f 73 69 74 6f 72 79 2e 0a  n a repository..
03b0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e  */.#include "con
03c0: 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  fig.h".#include 
03d0: 22 62 72 61 6e 63 68 2e 68 22 0a 23 69 6e 63 6c  "branch.h".#incl
03e0: 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e 0a 0a  ude <assert.h>..
03f0: 2f 2a 0a 2a 2a 20 20 66 6f 73 73 69 6c 20 62 72  /*.**  fossil br
0400: 61 6e 63 68 20 6e 65 77 20 20 20 20 42 52 41 4e  anch new    BRAN
0410: 43 48 2d 4e 41 4d 45 20 3f 4f 52 49 47 49 4e 2d  CH-NAME ?ORIGIN-
0420: 43 48 45 43 4b 2d 49 4e 3f 20 3f 2d 62 67 63 6f  CHECK-IN? ?-bgco
0430: 6c 6f 72 20 43 4f 4c 4f 52 3f 0a 2a 2a 20 20 61  lor COLOR?.**  a
0440: 72 67 76 30 20 20 61 72 67 76 31 20 20 61 72 67  rgv0  argv1  arg
0450: 76 32 20 20 61 72 67 76 33 20 20 20 20 20 20 20  v2  argv3       
0460: 61 72 67 76 34 0a 2a 2f 0a 76 6f 69 64 20 62 72  argv4.*/.void br
0470: 61 6e 63 68 5f 6e 65 77 28 76 6f 69 64 29 7b 0a  anch_new(void){.
0480: 20 20 69 6e 74 20 72 6f 6f 74 69 64 3b 20 20 20    int rootid;   
0490: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 49 44 20           /* RID 
04a0: 6f 66 20 74 68 65 20 72 6f 6f 74 20 63 68 65 63  of the root chec
04b0: 6b 2d 69 6e 20 2d 20 77 68 61 74 20 77 65 20 62  k-in - what we b
04c0: 72 61 6e 63 68 20 6f 66 66 20 6f 66 20 2a 2f 0a  ranch off of */.
04d0: 20 20 69 6e 74 20 62 72 69 64 3b 20 20 20 20 20    int brid;     
04e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 49 44 20           /* RID 
04f0: 6f 66 20 74 68 65 20 62 72 61 6e 63 68 20 63 68  of the branch ch
0500: 65 63 6b 2d 69 6e 20 2a 2f 0a 20 20 69 6e 74 20  eck-in */.  int 
0510: 6e 6f 53 69 67 6e 3b 20 20 20 20 20 20 20 20 20  noSign;         
0520: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
0530: 65 20 62 72 61 6e 63 68 20 69 73 20 75 6e 73 69  e branch is unsi
0540: 67 6e 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  gned */.  int i;
0550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0560: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
0570: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 55 75 69   */.  char *zUui
0580: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
0590: 41 72 74 69 66 61 63 74 20 49 44 20 6f 66 20 6f  Artifact ID of o
05a0: 72 69 67 69 6e 20 2a 2f 0a 20 20 53 74 6d 74 20  rigin */.  Stmt 
05b0: 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
05c0: 20 20 2f 2a 20 47 65 6e 65 72 69 63 20 71 75 65    /* Generic que
05d0: 72 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ry */.  const ch
05e0: 61 72 20 2a 7a 42 72 61 6e 63 68 3b 20 20 20 2f  ar *zBranch;   /
05f0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  * Name of the ne
0600: 77 20 62 72 61 6e 63 68 20 2a 2f 0a 20 20 63 68  w branch */.  ch
0610: 61 72 20 2a 7a 44 61 74 65 3b 20 20 20 20 20 20  ar *zDate;      
0620: 20 20 20 20 20 2f 2a 20 44 61 74 65 20 74 68 61       /* Date tha
0630: 74 20 62 72 61 6e 63 68 20 77 61 73 20 63 72 65  t branch was cre
0640: 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ated */.  char *
0650: 7a 43 6f 6d 6d 65 6e 74 3b 20 20 20 20 20 20 20  zComment;       
0660: 20 2f 2a 20 43 68 65 63 6b 2d 69 6e 20 63 6f 6d   /* Check-in com
0670: 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 6e 65 77  ment for the new
0680: 20 62 72 61 6e 63 68 20 2a 2f 0a 20 20 63 6f 6e   branch */.  con
0690: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 6f 72 3b  st char *zColor;
06a0: 20 20 20 20 2f 2a 20 43 6f 6c 6f 72 20 6f 66 20      /* Color of 
06b0: 74 68 65 20 6e 65 77 20 62 72 61 6e 63 68 20 2a  the new branch *
06c0: 2f 0a 20 20 42 6c 6f 62 20 62 72 61 6e 63 68 3b  /.  Blob branch;
06d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
06e0: 6e 69 66 65 73 74 20 66 6f 72 20 74 68 65 20 6e  nifest for the n
06f0: 65 77 20 62 72 61 6e 63 68 20 2a 2f 0a 20 20 42  ew branch */.  B
0700: 6c 6f 62 20 70 61 72 65 6e 74 3b 20 20 20 20 20  lob parent;     
0710: 20 20 20 20 20 20 2f 2a 20 72 6f 6f 74 20 63 68        /* root ch
0720: 65 63 6b 2d 69 6e 20 6d 61 6e 69 66 65 73 74 20  eck-in manifest 
0730: 2a 2f 0a 20 20 4d 61 6e 69 66 65 73 74 20 6d 50  */.  Manifest mP
0740: 61 72 65 6e 74 3b 20 20 20 20 20 20 2f 2a 20 50  arent;      /* P
0750: 61 72 73 65 64 20 70 61 72 65 6e 74 20 6d 61 6e  arsed parent man
0760: 69 66 65 73 74 20 2a 2f 0a 20 20 42 6c 6f 62 20  ifest */.  Blob 
0770: 6d 63 6b 73 75 6d 3b 20 20 20 20 20 20 20 20 20  mcksum;         
0780: 20 20 2f 2a 20 53 65 6c 66 2d 63 68 65 63 6b 73    /* Self-checks
0790: 75 6d 20 6f 6e 20 74 68 65 20 6d 61 6e 69 66 65  um on the manife
07a0: 73 74 20 2a 2f 0a 20 0a 20 20 6e 6f 53 69 67 6e  st */. .  noSign
07b0: 20 3d 20 66 69 6e 64 5f 6f 70 74 69 6f 6e 28 22   = find_option("
07c0: 6e 6f 73 69 67 6e 22 2c 22 22 2c 30 29 21 3d 30  nosign","",0)!=0
07d0: 3b 0a 20 20 7a 43 6f 6c 6f 72 20 3d 20 66 69 6e  ;.  zColor = fin
07e0: 64 5f 6f 70 74 69 6f 6e 28 22 62 67 63 6f 6c 6f  d_option("bgcolo
07f0: 72 22 2c 22 63 22 2c 31 29 3b 0a 20 20 76 65 72  r","c",1);.  ver
0800: 69 66 79 5f 61 6c 6c 5f 6f 70 74 69 6f 6e 73 28  ify_all_options(
0810: 29 3b 0a 20 20 69 66 28 20 67 2e 61 72 67 63 3c  );.  if( g.argc<
0820: 33 20 29 7b 0a 20 20 20 20 75 73 61 67 65 28 22  3 ){.    usage("
0830: 62 72 61 6e 63 68 20 6e 65 77 20 42 52 41 4e 43  branch new BRANC
0840: 48 2d 4e 41 4d 45 20 3f 52 4f 4f 54 2d 43 48 45  H-NAME ?ROOT-CHE
0850: 43 4b 2d 49 4e 3f 20 3f 2d 62 67 63 6f 6c 6f 72  CK-IN? ?-bgcolor
0860: 20 43 4f 4c 4f 52 3f 22 29 3b 0a 20 20 7d 0a 20   COLOR?");.  }. 
0870: 20 64 62 5f 66 69 6e 64 5f 61 6e 64 5f 6f 70 65   db_find_and_ope
0880: 6e 5f 72 65 70 6f 73 69 74 6f 72 79 28 31 29 3b  n_repository(1);
0890: 20 20 0a 20 20 6e 6f 53 69 67 6e 20 3d 20 64 62    .  noSign = db
08a0: 5f 67 65 74 5f 69 6e 74 28 22 6f 6d 69 74 73 69  _get_int("omitsi
08b0: 67 6e 22 2c 20 30 29 7c 6e 6f 53 69 67 6e 3b 0a  gn", 0)|noSign;.
08c0: 20 20 0a 20 20 2f 2a 20 66 6f 73 73 69 6c 20 62    .  /* fossil b
08d0: 72 61 6e 63 68 20 6e 65 77 20 6e 61 6d 65 20 2a  ranch new name *
08e0: 2f 0a 20 20 7a 42 72 61 6e 63 68 20 3d 20 67 2e  /.  zBranch = g.
08f0: 61 72 67 76 5b 33 5d 3b 0a 20 20 69 66 28 20 7a  argv[3];.  if( z
0900: 42 72 61 6e 63 68 3d 3d 30 20 7c 7c 20 7a 42 72  Branch==0 || zBr
0910: 61 6e 63 68 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20  anch[0]==0 ){.  
0920: 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22    fossil_panic("
0930: 62 72 61 6e 63 68 20 6e 61 6d 65 20 63 61 6e 6e  branch name cann
0940: 6f 74 20 62 65 20 65 6d 70 74 79 22 29 3b 0a 20  ot be empty");. 
0950: 20 7d 0a 20 20 69 66 28 20 64 62 5f 65 78 69 73   }.  if( db_exis
0960: 74 73 28 0a 20 20 20 20 20 20 20 20 22 53 45 4c  ts(.        "SEL
0970: 45 43 54 20 31 20 46 52 4f 4d 20 74 61 67 78 72  ECT 1 FROM tagxr
0980: 65 66 22 0a 20 20 20 20 20 20 20 20 22 20 57 48  ef".        " WH
0990: 45 52 45 20 74 61 67 74 79 70 65 3e 30 22 0a 20  ERE tagtype>0". 
09a0: 20 20 20 20 20 20 20 22 20 20 20 41 4e 44 20 74         "   AND t
09b0: 61 67 69 64 3d 28 53 45 4c 45 43 54 20 74 61 67  agid=(SELECT tag
09c0: 69 64 20 46 52 4f 4d 20 74 61 67 20 57 48 45 52  id FROM tag WHER
09d0: 45 20 74 61 67 6e 61 6d 65 3d 27 73 79 6d 2d 25  E tagname='sym-%
09e0: 73 27 29 22 2c 0a 20 20 20 20 20 20 20 20 7a 42  s')",.        zB
09f0: 72 61 6e 63 68 29 21 3d 30 20 29 7b 0a 20 20 20  ranch)!=0 ){.   
0a00: 20 66 6f 73 73 69 6c 5f 66 61 74 61 6c 28 22 62   fossil_fatal("b
0a10: 72 61 6e 63 68 20 5c 22 25 73 5c 22 20 61 6c 72  ranch \"%s\" alr
0a20: 65 61 64 79 20 65 78 69 73 74 73 22 2c 20 7a 42  eady exists", zB
0a30: 72 61 6e 63 68 29 3b 0a 20 20 7d 0a 0a 20 20 75  ranch);.  }..  u
0a40: 73 65 72 5f 73 65 6c 65 63 74 28 29 3b 0a 20 20  ser_select();.  
0a50: 64 62 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63  db_begin_transac
0a60: 74 69 6f 6e 28 29 3b 0a 20 20 69 66 28 20 67 2e  tion();.  if( g.
0a70: 61 72 67 63 3c 35 20 29 7b 0a 20 20 20 20 69 66  argc<5 ){.    if
0a80: 28 20 75 6e 73 61 76 65 64 5f 63 68 61 6e 67 65  ( unsaved_change
0a90: 73 28 29 20 29 7b 0a 20 20 20 20 20 20 66 6f 73  s() ){.      fos
0aa0: 73 69 6c 5f 66 61 74 61 6c 28 22 74 68 65 72 65  sil_fatal("there
0ab0: 20 61 72 65 20 75 6e 63 6f 6d 6d 69 74 74 65 64   are uncommitted
0ac0: 20 63 68 61 6e 67 65 73 2e 20 70 6c 65 61 73 65   changes. please
0ad0: 20 63 6f 6d 6d 69 74 20 66 69 72 73 74 22 29 3b   commit first");
0ae0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 6f 6f 74 69  .    }.    rooti
0af0: 64 20 3d 20 64 62 5f 6c 67 65 74 5f 69 6e 74 28  d = db_lget_int(
0b00: 22 63 68 65 63 6b 6f 75 74 22 2c 20 30 29 3b 0a  "checkout", 0);.
0b10: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 6f 6f    }else{.    roo
0b20: 74 69 64 20 3d 20 6e 61 6d 65 5f 74 6f 5f 72 69  tid = name_to_ri
0b30: 64 28 67 2e 61 72 67 76 5b 34 5d 29 3b 0a 20 20  d(g.argv[4]);.  
0b40: 7d 0a 20 20 69 66 28 20 72 6f 6f 74 69 64 3d 3d  }.  if( rootid==
0b50: 30 20 29 7b 0a 20 20 20 20 66 6f 73 73 69 6c 5f  0 ){.    fossil_
0b60: 66 61 74 61 6c 28 22 75 6e 61 62 6c 65 20 74 6f  fatal("unable to
0b70: 20 6c 6f 63 61 74 65 20 63 68 65 63 6b 2d 69 6e   locate check-in
0b80: 20 6f 66 66 20 6f 66 20 77 68 69 63 68 20 74 6f   off of which to
0b90: 20 62 72 61 6e 63 68 22 29 3b 0a 20 20 7d 0a 0a   branch");.  }..
0ba0: 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6d 61    /* Create a ma
0bb0: 6e 69 66 65 73 74 20 66 6f 72 20 74 68 65 20 6e  nifest for the n
0bc0: 65 77 20 62 72 61 6e 63 68 20 2a 2f 0a 20 20 62  ew branch */.  b
0bd0: 6c 6f 62 5f 7a 65 72 6f 28 26 62 72 61 6e 63 68  lob_zero(&branch
0be0: 29 3b 0a 20 20 7a 43 6f 6d 6d 65 6e 74 20 3d 20  );.  zComment = 
0bf0: 6d 70 72 69 6e 74 66 28 22 43 72 65 61 74 65 20  mprintf("Create 
0c00: 6e 65 77 20 62 72 61 6e 63 68 20 6e 61 6d 65 64  new branch named
0c10: 20 5c 22 25 68 5c 22 22 2c 20 7a 42 72 61 6e 63   \"%h\"", zBranc
0c20: 68 29 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  h);.  blob_appen
0c30: 64 66 28 26 62 72 61 6e 63 68 2c 20 22 43 20 25  df(&branch, "C %
0c40: 46 5c 6e 22 2c 20 7a 43 6f 6d 6d 65 6e 74 29 3b  F\n", zComment);
0c50: 0a 20 20 7a 44 61 74 65 20 3d 20 64 62 5f 74 65  .  zDate = db_te
0c60: 78 74 28 30 2c 20 22 53 45 4c 45 43 54 20 64 61  xt(0, "SELECT da
0c70: 74 65 74 69 6d 65 28 27 6e 6f 77 27 29 22 29 3b  tetime('now')");
0c80: 0a 20 20 7a 44 61 74 65 5b 31 30 5d 20 3d 20 27  .  zDate[10] = '
0c90: 54 27 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e  T';.  blob_appen
0ca0: 64 66 28 26 62 72 61 6e 63 68 2c 20 22 44 20 25  df(&branch, "D %
0cb0: 73 5c 6e 22 2c 20 7a 44 61 74 65 29 3b 0a 0a 20  s\n", zDate);.. 
0cc0: 20 2f 2a 20 43 6f 70 79 20 61 6c 6c 20 6f 66 20   /* Copy all of 
0cd0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d  the content from
0ce0: 20 74 68 65 20 70 61 72 65 6e 74 20 69 6e 74 6f   the parent into
0cf0: 20 74 68 65 20 62 72 61 6e 63 68 20 2a 2f 0a 20   the branch */. 
0d00: 20 63 6f 6e 74 65 6e 74 5f 67 65 74 28 72 6f 6f   content_get(roo
0d10: 74 69 64 2c 20 26 70 61 72 65 6e 74 29 3b 0a 20  tid, &parent);. 
0d20: 20 6d 61 6e 69 66 65 73 74 5f 70 61 72 73 65 28   manifest_parse(
0d30: 26 6d 50 61 72 65 6e 74 2c 20 26 70 61 72 65 6e  &mParent, &paren
0d40: 74 29 3b 0a 20 20 69 66 28 20 6d 50 61 72 65 6e  t);.  if( mParen
0d50: 74 2e 74 79 70 65 21 3d 43 46 54 59 50 45 5f 4d  t.type!=CFTYPE_M
0d60: 41 4e 49 46 45 53 54 20 29 7b 0a 20 20 20 20 66  ANIFEST ){.    f
0d70: 6f 73 73 69 6c 5f 66 61 74 61 6c 28 22 25 73 20  ossil_fatal("%s 
0d80: 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 63  is not a valid c
0d90: 68 65 63 6b 2d 69 6e 22 2c 20 67 2e 61 72 67 76  heck-in", g.argv
0da0: 5b 34 5d 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  [4]);.  }.  for(
0db0: 69 3d 30 3b 20 69 3c 6d 50 61 72 65 6e 74 2e 6e  i=0; i<mParent.n
0dc0: 46 69 6c 65 3b 20 2b 2b 69 29 7b 0a 20 20 20 20  File; ++i){.    
0dd0: 69 66 28 20 6d 50 61 72 65 6e 74 2e 61 46 69 6c  if( mParent.aFil
0de0: 65 5b 69 5d 2e 7a 50 65 72 6d 5b 30 5d 20 29 7b  e[i].zPerm[0] ){
0df0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65  .      blob_appe
0e00: 6e 64 66 28 26 62 72 61 6e 63 68 2c 20 22 46 20  ndf(&branch, "F 
0e10: 25 46 20 25 73 20 25 73 5c 6e 22 2c 0a 20 20 20  %F %s %s\n",.   
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e30: 6d 50 61 72 65 6e 74 2e 61 46 69 6c 65 5b 69 5d  mParent.aFile[i]
0e40: 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  .zName,.        
0e50: 20 20 20 20 20 20 20 20 20 20 20 6d 50 61 72 65             mPare
0e60: 6e 74 2e 61 46 69 6c 65 5b 69 5d 2e 7a 55 75 69  nt.aFile[i].zUui
0e70: 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d,.             
0e80: 20 20 20 20 20 20 6d 50 61 72 65 6e 74 2e 61 46        mParent.aF
0e90: 69 6c 65 5b 69 5d 2e 7a 50 65 72 6d 29 3b 0a 20  ile[i].zPerm);. 
0ea0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
0eb0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 62 72  blob_appendf(&br
0ec0: 61 6e 63 68 2c 20 22 46 20 25 46 20 25 73 5c 6e  anch, "F %F %s\n
0ed0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
0ee0: 20 20 20 20 20 20 6d 50 61 72 65 6e 74 2e 61 46        mParent.aF
0ef0: 69 6c 65 5b 69 5d 2e 7a 4e 61 6d 65 2c 0a 20 20  ile[i].zName,.  
0f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f10: 20 6d 50 61 72 65 6e 74 2e 61 46 69 6c 65 5b 69   mParent.aFile[i
0f20: 5d 2e 7a 55 75 69 64 29 3b 0a 20 20 20 20 7d 0a  ].zUuid);.    }.
0f30: 20 20 7d 0a 20 20 7a 55 75 69 64 20 3d 20 64 62    }.  zUuid = db
0f40: 5f 74 65 78 74 28 30 2c 20 22 53 45 4c 45 43 54  _text(0, "SELECT
0f50: 20 75 75 69 64 20 46 52 4f 4d 20 62 6c 6f 62 20   uuid FROM blob 
0f60: 57 48 45 52 45 20 72 69 64 3d 25 64 22 2c 20 72  WHERE rid=%d", r
0f70: 6f 6f 74 69 64 29 3b 0a 20 20 62 6c 6f 62 5f 61  ootid);.  blob_a
0f80: 70 70 65 6e 64 66 28 26 62 72 61 6e 63 68 2c 20  ppendf(&branch, 
0f90: 22 50 20 25 73 5c 6e 22 2c 20 7a 55 75 69 64 29  "P %s\n", zUuid)
0fa0: 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66  ;.  blob_appendf
0fb0: 28 26 62 72 61 6e 63 68 2c 20 22 52 20 25 73 5c  (&branch, "R %s\
0fc0: 6e 22 2c 20 6d 50 61 72 65 6e 74 2e 7a 52 65 70  n", mParent.zRep
0fd0: 6f 43 6b 73 75 6d 29 3b 0a 20 20 6d 61 6e 69 66  oCksum);.  manif
0fe0: 65 73 74 5f 63 6c 65 61 72 28 26 6d 50 61 72 65  est_clear(&mPare
0ff0: 6e 74 29 3b 0a 0a 20 20 2f 2a 20 41 64 64 20 74  nt);..  /* Add t
1000: 68 65 20 73 79 6d 62 6f 6c 69 63 20 62 72 61 6e  he symbolic bran
1010: 63 68 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20  ch name and the 
1020: 22 6e 65 77 62 72 61 6e 63 68 22 20 74 61 67 20  "newbranch" tag 
1030: 74 6f 20 69 64 65 6e 74 69 66 79 0a 20 20 2a 2a  to identify.  **
1040: 20 74 68 69 73 20 61 73 20 61 20 6e 65 77 20 62   this as a new b
1050: 72 61 6e 63 68 20 2a 2f 0a 20 20 69 66 28 20 7a  ranch */.  if( z
1060: 43 6f 6c 6f 72 21 3d 30 20 29 7b 0a 20 20 20 20  Color!=0 ){.    
1070: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 62 72  blob_appendf(&br
1080: 61 6e 63 68 2c 20 22 54 20 2a 62 67 63 6f 6c 6f  anch, "T *bgcolo
1090: 72 20 2a 20 25 46 5c 6e 22 2c 20 7a 43 6f 6c 6f  r * %F\n", zColo
10a0: 72 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 61  r);.  }.  blob_a
10b0: 70 70 65 6e 64 66 28 26 62 72 61 6e 63 68 2c 20  ppendf(&branch, 
10c0: 22 54 20 2a 73 79 6d 2d 25 46 20 2a 5c 6e 22 2c  "T *sym-%F *\n",
10d0: 20 7a 42 72 61 6e 63 68 29 3b 0a 20 20 62 6c 6f   zBranch);.  blo
10e0: 62 5f 61 70 70 65 6e 64 66 28 26 62 72 61 6e 63  b_appendf(&branc
10f0: 68 2c 20 22 54 20 2b 6e 65 77 62 72 61 6e 63 68  h, "T +newbranch
1100: 20 2a 5c 6e 22 29 3b 0a 0a 20 20 2f 2a 20 43 61   *\n");..  /* Ca
1110: 6e 63 65 6c 20 61 6c 6c 20 6f 74 68 65 72 20 73  ncel all other s
1120: 79 6d 62 6f 6c 69 63 20 74 61 67 73 20 2a 2f 0a  ymbolic tags */.
1130: 20 20 64 62 5f 70 72 65 70 61 72 65 28 26 71 2c    db_prepare(&q,
1140: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 74  .      "SELECT t
1150: 61 67 6e 61 6d 65 20 46 52 4f 4d 20 74 61 67 78  agname FROM tagx
1160: 72 65 66 2c 20 74 61 67 22 0a 20 20 20 20 20 20  ref, tag".      
1170: 22 20 57 48 45 52 45 20 74 61 67 78 72 65 66 2e  " WHERE tagxref.
1180: 72 69 64 3d 25 64 20 41 4e 44 20 74 61 67 78 72  rid=%d AND tagxr
1190: 65 66 2e 74 61 67 69 64 3d 74 61 67 2e 74 61 67  ef.tagid=tag.tag
11a0: 69 64 22 0a 20 20 20 20 20 20 22 20 20 20 41 4e  id".      "   AN
11b0: 44 20 74 61 67 74 79 70 65 3e 30 20 41 4e 44 20  D tagtype>0 AND 
11c0: 74 61 67 6e 61 6d 65 20 47 4c 4f 42 20 27 73 79  tagname GLOB 'sy
11d0: 6d 2d 2a 27 22 0a 20 20 20 20 20 20 22 20 4f 52  m-*'".      " OR
11e0: 44 45 52 20 42 59 20 74 61 67 6e 61 6d 65 22 2c  DER BY tagname",
11f0: 0a 20 20 20 20 20 20 72 6f 6f 74 69 64 29 3b 0a  .      rootid);.
1200: 20 20 77 68 69 6c 65 28 20 64 62 5f 73 74 65 70    while( db_step
1210: 28 26 71 29 3d 3d 53 51 4c 49 54 45 5f 52 4f 57  (&q)==SQLITE_ROW
1220: 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
1230: 61 72 20 2a 7a 54 61 67 20 3d 20 64 62 5f 63 6f  ar *zTag = db_co
1240: 6c 75 6d 6e 5f 74 65 78 74 28 26 71 2c 20 30 29  lumn_text(&q, 0)
1250: 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e  ;.    blob_appen
1260: 64 66 28 26 62 72 61 6e 63 68 2c 20 22 54 20 2d  df(&branch, "T -
1270: 25 73 20 2a 5c 6e 22 2c 20 7a 54 61 67 29 3b 0a  %s *\n", zTag);.
1280: 20 20 7d 0a 20 20 64 62 5f 66 69 6e 61 6c 69 7a    }.  db_finaliz
1290: 65 28 26 71 29 3b 0a 20 20 0a 20 20 62 6c 6f 62  e(&q);.  .  blob
12a0: 5f 61 70 70 65 6e 64 66 28 26 62 72 61 6e 63 68  _appendf(&branch
12b0: 2c 20 22 55 20 25 46 5c 6e 22 2c 20 67 2e 7a 4c  , "U %F\n", g.zL
12c0: 6f 67 69 6e 29 3b 0a 20 20 6d 64 35 73 75 6d 5f  ogin);.  md5sum_
12d0: 62 6c 6f 62 28 26 62 72 61 6e 63 68 2c 20 26 6d  blob(&branch, &m
12e0: 63 6b 73 75 6d 29 3b 0a 20 20 62 6c 6f 62 5f 61  cksum);.  blob_a
12f0: 70 70 65 6e 64 66 28 26 62 72 61 6e 63 68 2c 20  ppendf(&branch, 
1300: 22 5a 20 25 62 5c 6e 22 2c 20 26 6d 63 6b 73 75  "Z %b\n", &mcksu
1310: 6d 29 3b 0a 20 20 69 66 28 20 21 6e 6f 53 69 67  m);.  if( !noSig
1320: 6e 20 26 26 20 63 6c 65 61 72 73 69 67 6e 28 26  n && clearsign(&
1330: 62 72 61 6e 63 68 2c 20 26 62 72 61 6e 63 68 29  branch, &branch)
1340: 20 29 7b 0a 20 20 20 20 42 6c 6f 62 20 61 6e 73   ){.    Blob ans
1350: 3b 0a 20 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28  ;.    blob_zero(
1360: 26 61 6e 73 29 3b 0a 20 20 20 20 70 72 6f 6d 70  &ans);.    promp
1370: 74 5f 75 73 65 72 28 22 75 6e 61 62 6c 65 20 74  t_user("unable t
1380: 6f 20 73 69 67 6e 20 6d 61 6e 69 66 65 73 74 2e  o sign manifest.
1390: 20 20 63 6f 6e 74 69 6e 75 65 20 5b 79 2f 4e 5d    continue [y/N]
13a0: 3f 20 22 2c 20 26 61 6e 73 29 3b 0a 20 20 20 20  ? ", &ans);.    
13b0: 69 66 28 20 62 6c 6f 62 5f 73 74 72 28 26 61 6e  if( blob_str(&an
13c0: 73 29 5b 30 5d 21 3d 27 79 27 20 29 7b 0a 20 20  s)[0]!='y' ){.  
13d0: 20 20 20 20 64 62 5f 65 6e 64 5f 74 72 61 6e 73      db_end_trans
13e0: 61 63 74 69 6f 6e 28 31 29 3b 0a 20 20 20 20 20  action(1);.     
13f0: 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20 7d 0a   exit(1);.    }.
1400: 20 20 7d 0a 0a 20 20 62 72 69 64 20 3d 20 63 6f    }..  brid = co
1410: 6e 74 65 6e 74 5f 70 75 74 28 26 62 72 61 6e 63  ntent_put(&branc
1420: 68 2c 20 30 2c 20 30 29 3b 0a 20 20 69 66 28 20  h, 0, 0);.  if( 
1430: 62 72 69 64 3d 3d 30 20 29 7b 0a 20 20 20 20 66  brid==0 ){.    f
1440: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 74 72 6f  ossil_panic("tro
1450: 75 62 6c 65 20 63 6f 6d 6d 69 74 74 69 6e 67 20  uble committing 
1460: 6d 61 6e 69 66 65 73 74 3a 20 25 73 22 2c 20 67  manifest: %s", g
1470: 2e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  .zErrMsg);.  }. 
1480: 20 64 62 5f 6d 75 6c 74 69 5f 65 78 65 63 28 22   db_multi_exec("
1490: 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45  INSERT OR IGNORE
14a0: 20 49 4e 54 4f 20 75 6e 73 65 6e 74 20 56 41 4c   INTO unsent VAL
14b0: 55 45 53 28 25 64 29 22 2c 20 62 72 69 64 29 3b  UES(%d)", brid);
14c0: 0a 20 20 69 66 28 20 6d 61 6e 69 66 65 73 74 5f  .  if( manifest_
14d0: 63 72 6f 73 73 6c 69 6e 6b 28 62 72 69 64 2c 20  crosslink(brid, 
14e0: 26 62 72 61 6e 63 68 29 3d 3d 30 20 29 7b 0a 20  &branch)==0 ){. 
14f0: 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28     fossil_panic(
1500: 22 75 6e 61 62 6c 65 20 74 6f 20 69 6e 73 74 61  "unable to insta
1510: 6c 6c 20 6e 65 77 20 6d 61 6e 69 66 65 73 74 22  ll new manifest"
1520: 29 3b 0a 20 20 7d 0a 20 20 63 6f 6e 74 65 6e 74  );.  }.  content
1530: 5f 64 65 6c 74 69 66 79 28 72 6f 6f 74 69 64 2c  _deltify(rootid,
1540: 20 62 72 69 64 2c 20 30 29 3b 0a 20 20 7a 55 75   brid, 0);.  zUu
1550: 69 64 20 3d 20 64 62 5f 74 65 78 74 28 30 2c 20  id = db_text(0, 
1560: 22 53 45 4c 45 43 54 20 75 75 69 64 20 46 52 4f  "SELECT uuid FRO
1570: 4d 20 62 6c 6f 62 20 57 48 45 52 45 20 72 69 64  M blob WHERE rid
1580: 3d 25 64 22 2c 20 62 72 69 64 29 3b 0a 20 20 70  =%d", brid);.  p
1590: 72 69 6e 74 66 28 22 4e 65 77 20 62 72 61 6e 63  rintf("New branc
15a0: 68 3a 20 25 73 5c 6e 22 2c 20 7a 55 75 69 64 29  h: %s\n", zUuid)
15b0: 3b 0a 20 20 69 66 28 20 67 2e 61 72 67 63 3d 3d  ;.  if( g.argc==
15c0: 33 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  3 ){.    printf(
15d0: 0a 20 20 20 20 20 20 22 5c 6e 22 0a 20 20 20 20  .      "\n".    
15e0: 20 20 22 4e 6f 74 65 3a 20 74 68 65 20 6c 6f 63    "Note: the loc
15f0: 61 6c 20 63 68 65 63 6b 2d 6f 75 74 20 68 61 73  al check-out has
1600: 20 6e 6f 74 20 62 65 65 6e 20 75 70 64 61 74 65   not been update
1610: 64 20 74 6f 20 74 68 65 20 6e 65 77 5c 6e 22 0a  d to the new\n".
1620: 20 20 20 20 20 20 22 20 20 20 20 20 20 62 72 61        "      bra
1630: 6e 63 68 2e 20 20 54 6f 20 62 65 67 69 6e 20 77  nch.  To begin w
1640: 6f 72 6b 69 6e 67 20 6f 6e 20 74 68 65 20 6e 65  orking on the ne
1650: 77 20 62 72 61 6e 63 68 2c 20 64 6f 20 74 68 69  w branch, do thi
1660: 73 3a 5c 6e 22 0a 20 20 20 20 20 20 22 5c 6e 22  s:\n".      "\n"
1670: 0a 20 20 20 20 20 20 22 20 20 20 20 20 20 25 73  .      "      %s
1680: 20 75 70 64 61 74 65 20 25 73 5c 6e 22 2c 0a 20   update %s\n",. 
1690: 20 20 20 20 20 67 2e 61 72 67 76 5b 30 5d 2c 20       g.argv[0], 
16a0: 7a 42 72 61 6e 63 68 0a 20 20 20 20 29 3b 0a 20  zBranch.    );. 
16b0: 20 7d 0a 0a 0a 20 20 2f 2a 20 43 6f 6d 6d 69 74   }...  /* Commit
16c0: 20 2a 2f 0a 20 20 64 62 5f 65 6e 64 5f 74 72 61   */.  db_end_tra
16d0: 6e 73 61 63 74 69 6f 6e 28 30 29 3b 0a 20 20 0a  nsaction(0);.  .
16e0: 20 20 2f 2a 20 44 6f 20 61 6e 20 61 75 74 6f 73    /* Do an autos
16f0: 79 6e 63 20 70 75 73 68 2c 20 69 66 20 72 65 71  ync push, if req
1700: 75 65 73 74 65 64 20 2a 2f 0a 20 20 61 75 74 6f  uested */.  auto
1710: 73 79 6e 63 28 41 55 54 4f 53 59 4e 43 5f 50 55  sync(AUTOSYNC_PU
1720: 53 48 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 4f  SH);.}../*.** CO
1730: 4d 4d 41 4e 44 3a 20 62 72 61 6e 63 68 0a 2a 2a  MMAND: branch.**
1740: 0a 2a 2a 20 55 73 61 67 65 3a 20 25 66 6f 73 73  .** Usage: %foss
1750: 69 6c 20 62 72 61 6e 63 68 20 53 55 42 43 4f 4d  il branch SUBCOM
1760: 4d 41 4e 44 20 2e 2e 2e 20 3f 2d 52 7c 2d 2d 72  MAND ... ?-R|--r
1770: 65 70 6f 73 69 74 6f 72 79 20 46 49 4c 45 3f 0a  epository FILE?.
1780: 2a 2a 0a 2a 2a 20 52 75 6e 20 76 61 72 69 6f 75  **.** Run variou
1790: 73 20 73 75 62 63 6f 6d 6d 61 6e 64 73 20 6f 6e  s subcommands on
17a0: 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 6f 66   the branches of
17b0: 20 74 68 65 20 6f 70 65 6e 20 72 65 70 6f 73 69   the open reposi
17c0: 74 6f 72 79 20 6f 72 0a 2a 2a 20 6f 66 20 74 68  tory or.** of th
17d0: 65 20 72 65 70 6f 73 69 74 6f 72 79 20 69 64 65  e repository ide
17e0: 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20 2d  ntified by the -
17f0: 52 20 6f 72 20 2d 2d 72 65 70 6f 73 69 74 6f 72  R or --repositor
1800: 79 20 6f 70 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  y option..**.** 
1810: 20 20 20 25 66 6f 73 73 69 6c 20 62 72 61 6e 63     %fossil branc
1820: 68 20 6e 65 77 20 42 52 41 4e 43 48 2d 4e 41 4d  h new BRANCH-NAM
1830: 45 20 3f 52 4f 4f 54 2d 43 48 45 43 4b 2d 49 4e  E ?ROOT-CHECK-IN
1840: 3f 20 3f 2d 62 67 63 6f 6c 6f 72 20 43 4f 4c 4f  ? ?-bgcolor COLO
1850: 52 3f 20 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  R? .**.**       
1860: 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 62 72   Create a new br
1870: 61 6e 63 68 20 42 52 41 4e 43 48 2d 4e 41 4d 45  anch BRANCH-NAME
1880: 2e 20 59 6f 75 20 63 61 6e 20 6f 70 74 69 6f 6e  . You can option
1890: 61 6c 6c 79 20 67 69 76 65 0a 2a 2a 20 20 20 20  ally give.**    
18a0: 20 20 20 20 61 20 63 6f 6d 6d 69 74 20 6d 65 73      a commit mes
18b0: 73 61 67 65 20 61 6e 64 20 62 72 61 6e 63 68 20  sage and branch 
18c0: 63 6f 6c 6f 72 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  color..**.**    
18d0: 25 66 6f 73 73 69 6c 20 62 72 61 6e 63 68 20 6c  %fossil branch l
18e0: 69 73 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  ist.**.**       
18f0: 20 4c 69 73 74 20 61 6c 6c 20 62 72 61 6e 63 68   List all branch
1900: 65 73 0a 2a 2a 0a 2a 2f 0a 76 6f 69 64 20 62 72  es.**.*/.void br
1910: 61 6e 63 68 5f 63 6d 64 28 76 6f 69 64 29 7b 0a  anch_cmd(void){.
1920: 20 20 69 6e 74 20 6e 3b 0a 20 20 64 62 5f 66 69    int n;.  db_fi
1930: 6e 64 5f 61 6e 64 5f 6f 70 65 6e 5f 72 65 70 6f  nd_and_open_repo
1940: 73 69 74 6f 72 79 28 31 29 3b 0a 20 20 69 66 28  sitory(1);.  if(
1950: 20 67 2e 61 72 67 63 3c 33 20 29 7b 0a 20 20 20   g.argc<3 ){.   
1960: 20 75 73 61 67 65 28 22 6e 65 77 7c 6c 69 73 74   usage("new|list
1970: 20 2e 2e 2e 22 29 3b 0a 20 20 7d 0a 20 20 6e 20   ...");.  }.  n 
1980: 3d 20 73 74 72 6c 65 6e 28 67 2e 61 72 67 76 5b  = strlen(g.argv[
1990: 32 5d 29 3b 0a 20 20 69 66 28 20 6e 3e 3d 32 20  2]);.  if( n>=2 
19a0: 26 26 20 73 74 72 6e 63 6d 70 28 67 2e 61 72 67  && strncmp(g.arg
19b0: 76 5b 32 5d 2c 22 6e 65 77 22 2c 6e 29 3d 3d 30  v[2],"new",n)==0
19c0: 20 29 7b 0a 20 20 20 20 62 72 61 6e 63 68 5f 6e   ){.    branch_n
19d0: 65 77 28 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ew();.  }else if
19e0: 28 20 6e 3e 3d 32 20 26 26 20 73 74 72 6e 63 6d  ( n>=2 && strncm
19f0: 70 28 67 2e 61 72 67 76 5b 32 5d 2c 22 6c 69 73  p(g.argv[2],"lis
1a00: 74 22 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  t",n)==0 ){.    
1a10: 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 62 72  fossil_panic("br
1a20: 61 6e 63 68 20 6c 69 73 74 20 69 73 20 6e 6f 74  anch list is not
1a30: 20 79 65 74 20 63 6f 6d 70 6c 65 74 65 64 22 29   yet completed")
1a40: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
1a50: 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 62 72 61  ossil_panic("bra
1a60: 6e 63 68 20 73 75 62 63 6f 6d 6d 61 6e 64 20 73  nch subcommand s
1a70: 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
1a80: 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
1a90: 20 20 20 20 22 6e 65 77 20 6c 69 73 74 22 29 3b      "new list");
1aa0: 0a 20 20 7d 0a 7d 0a                             .  }.}.