Hex Artifact Content
Not logged in

Artifact ac07645905a762f59e35cb2ef29c471b04658277:

Attachment "patch-aa" to ticket [fc1a613294] added by anonymous 2010-09-08 18:59:18.
0000: 24 4e 65 74 42 53 44 24 0a 0a 2d 2d 2d 20 73 72  $NetBSD$..--- sr
0010: 63 2f 72 65 62 75 69 6c 64 2e 63 2e 6f 72 69 67  c/rebuild.c.orig
0020: 09 32 30 31 30 2d 30 38 2d 32 33 20 32 32 3a 33  .2010-08-23 22:3
0030: 34 3a 31 36 2e 30 30 30 30 30 30 30 30 30 20 2b  4:16.000000000 +
0040: 30 30 30 30 0a 2b 2b 2b 20 73 72 63 2f 72 65 62  0000.+++ src/reb
0050: 75 69 6c 64 2e 63 0a 40 40 20 2d 34 31 35 2c 31  uild.c.@@ -415,1
0060: 36 20 2b 34 31 35 2c 31 33 20 40 40 20 76 6f 69  6 +415,13 @@ voi
0070: 64 20 73 63 72 75 62 5f 63 6d 64 28 76 6f 69 64  d scrub_cmd(void
0080: 29 7b 0a 20 2a 2a 0a 20 2a 2f 0a 20 76 6f 69 64  ){. **. */. void
0090: 20 72 65 63 6f 6e 73 74 72 75 63 74 5f 63 6d 64   reconstruct_cmd
00a0: 28 76 6f 69 64 29 20 7b 0a 2b 20 20 69 6e 74 20  (void) {.+  int 
00b0: 69 3b 0a 20 20 20 63 68 61 72 20 2a 7a 50 61 73  i;.   char *zPas
00c0: 73 77 6f 72 64 3b 0a 20 20 20 44 49 52 20 2a 64  sword;.   DIR *d
00d0: 3b 0a 20 20 20 73 74 72 75 63 74 20 64 69 72 65  ;.   struct dire
00e0: 6e 74 20 2a 70 45 6e 74 72 79 3b 0a 20 20 20 42  nt *pEntry;.   B
00f0: 6c 6f 62 20 61 43 6f 6e 74 65 6e 74 3b 20 2f 2a  lob aContent; /*
0100: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
0110: 6a 75 73 74 20 72 65 61 64 20 61 72 74 69 66 61  just read artifa
0120: 63 74 20 2a 2f 0a 2d 20 20 69 66 28 20 67 2e 61  ct */.-  if( g.a
0130: 72 67 63 21 3d 34 20 29 7b 0a 2d 20 20 20 20 75  rgc!=4 ){.-    u
0140: 73 61 67 65 28 22 46 49 4c 45 4e 41 4d 45 20 44  sage("FILENAME D
0150: 49 52 45 43 54 4f 52 59 22 29 3b 0a 2d 20 20 7d  IRECTORY");.-  }
0160: 0a 2d 20 20 69 66 28 20 66 69 6c 65 5f 69 73 64  .-  if( file_isd
0170: 69 72 28 67 2e 61 72 67 76 5b 33 5d 29 21 3d 31  ir(g.argv[3])!=1
0180: 20 29 7b 0a 2d 20 20 20 20 70 72 69 6e 74 66 28   ){.-    printf(
0190: 22 5c 22 25 73 5c 22 20 69 73 20 6e 6f 74 20 61  "\"%s\" is not a
01a0: 20 64 69 72 65 63 74 6f 72 79 5c 6e 5c 6e 22 2c   directory\n\n",
01b0: 20 67 2e 61 72 67 76 5b 33 5d 29 3b 0a 2d 20 20   g.argv[3]);.-  
01c0: 20 20 75 73 61 67 65 28 22 46 49 4c 45 4e 41 4d    usage("FILENAM
01d0: 45 20 44 49 52 45 43 54 4f 52 59 22 29 3b 0a 2b  E DIRECTORY");.+
01e0: 20 20 69 66 28 20 67 2e 61 72 67 63 20 3c 20 34    if( g.argc < 4
01f0: 20 29 7b 0a 2b 20 20 20 20 75 73 61 67 65 28 22   ){.+    usage("
0200: 46 49 4c 45 4e 41 4d 45 20 44 49 52 45 43 54 4f  FILENAME DIRECTO
0210: 52 59 2e 2e 2e 22 29 3b 0a 20 20 20 7d 0a 20 20  RY...");.   }.  
0220: 20 64 62 5f 63 72 65 61 74 65 5f 72 65 70 6f 73   db_create_repos
0230: 69 74 6f 72 79 28 67 2e 61 72 67 76 5b 32 5d 29  itory(g.argv[2])
0240: 3b 0a 20 20 20 64 62 5f 6f 70 65 6e 5f 72 65 70  ;.   db_open_rep
0250: 6f 73 69 74 6f 72 79 28 67 2e 61 72 67 76 5b 32  ository(g.argv[2
0260: 5d 29 3b 0a 40 40 20 2d 34 33 32 2c 32 36 20 2b  ]);.@@ -432,26 +
0270: 34 32 39 2c 33 35 20 40 40 20 76 6f 69 64 20 72  429,35 @@ void r
0280: 65 63 6f 6e 73 74 72 75 63 74 5f 63 6d 64 28 76  econstruct_cmd(v
0290: 6f 69 64 29 20 7b 0a 20 20 20 64 62 5f 62 65 67  oid) {.   db_beg
02a0: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 28 29  in_transaction()
02b0: 3b 0a 20 20 20 64 62 5f 69 6e 69 74 69 61 6c 5f  ;.   db_initial_
02c0: 73 65 74 75 70 28 30 2c 20 30 2c 20 31 29 3b 0a  setup(0, 0, 1);.
02d0: 20 0a 2d 20 20 64 20 3d 20 6f 70 65 6e 64 69 72   .-  d = opendir
02e0: 28 67 2e 61 72 67 76 5b 33 5d 29 3b 0a 2d 20 20  (g.argv[3]);.-  
02f0: 69 66 28 20 64 20 29 7b 0a 2d 20 20 20 20 77 68  if( d ){.-    wh
0300: 69 6c 65 28 20 28 70 45 6e 74 72 79 3d 72 65 61  ile( (pEntry=rea
0310: 64 64 69 72 28 64 29 29 21 3d 30 20 29 7b 0a 2d  ddir(d))!=0 ){.-
0320: 20 20 20 20 20 20 42 6c 6f 62 20 70 61 74 68 3b        Blob path;
0330: 0a 2d 20 20 20 20 20 20 62 6c 6f 62 5f 69 6e 69  .-      blob_ini
0340: 74 28 26 70 61 74 68 2c 20 30 2c 20 30 29 3b 0a  t(&path, 0, 0);.
0350: 2d 20 20 20 20 20 20 69 66 28 20 70 45 6e 74 72  -      if( pEntr
0360: 79 2d 3e 64 5f 6e 61 6d 65 5b 30 5d 3d 3d 27 2e  y->d_name[0]=='.
0370: 27 20 29 7b 0a 2d 20 20 20 20 20 20 20 20 63 6f  ' ){.-        co
0380: 6e 74 69 6e 75 65 3b 0a 2d 20 20 20 20 20 20 7d  ntinue;.-      }
0390: 0a 2d 20 20 20 20 20 20 69 66 28 20 66 69 6c 65  .-      if( file
03a0: 5f 69 73 64 69 72 28 70 45 6e 74 72 79 2d 3e 64  _isdir(pEntry->d
03b0: 5f 6e 61 6d 65 29 3d 3d 31 20 29 7b 0a 2d 20 20  _name)==1 ){.-  
03c0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
03d0: 2d 20 20 20 20 20 20 7d 0a 2d 20 20 20 20 20 20  -      }.-      
03e0: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 26 70 61  blob_appendf(&pa
03f0: 74 68 2c 20 22 25 73 2f 25 73 22 2c 20 67 2e 61  th, "%s/%s", g.a
0400: 72 67 76 5b 33 5d 2c 20 70 45 6e 74 72 79 2d 3e  rgv[3], pEntry->
0410: 64 5f 6e 61 6d 65 29 3b 0a 2d 20 20 20 20 20 20  d_name);.-      
0420: 69 66 28 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72  if( blob_read_fr
0430: 6f 6d 5f 66 69 6c 65 28 26 61 43 6f 6e 74 65 6e  om_file(&aConten
0440: 74 2c 20 62 6c 6f 62 5f 73 74 72 28 26 70 61 74  t, blob_str(&pat
0450: 68 29 29 3d 3d 2d 31 20 29 7b 0a 2d 20 20 20 20  h))==-1 ){.-    
0460: 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63      fossil_panic
0470: 28 22 53 6f 6d 65 20 75 6e 6b 6e 6f 77 6e 20 65  ("Some unknown e
0480: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 77 68  rror occurred wh
0490: 69 6c 65 20 72 65 61 64 69 6e 67 20 5c 22 25 73  ile reading \"%s
04a0: 5c 22 22 2c 20 62 6c 6f 62 5f 73 74 72 28 26 70  \"", blob_str(&p
04b0: 61 74 68 29 29 3b 0a 2b 20 20 66 6f 72 28 20 69  ath));.+  for( i
04c0: 20 3d 20 33 3b 20 69 20 3c 20 67 2e 61 72 67 63   = 3; i < g.argc
04d0: 3b 20 2b 2b 69 20 29 20 7b 0a 2b 20 20 20 20 69  ; ++i ) {.+    i
04e0: 66 28 20 66 69 6c 65 5f 69 73 64 69 72 28 67 2e  f( file_isdir(g.
04f0: 61 72 67 76 5b 69 5d 29 21 3d 31 20 29 7b 0a 2b  argv[i])!=1 ){.+
0500: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 5c 22        printf("\"
0510: 25 73 5c 22 20 69 73 20 6e 6f 74 20 61 20 64 69  %s\" is not a di
0520: 72 65 63 74 6f 72 79 5c 6e 5c 6e 22 2c 20 67 2e  rectory\n\n", g.
0530: 61 72 67 76 5b 69 5d 29 3b 0a 2b 20 20 20 20 20  argv[i]);.+     
0540: 20 75 73 61 67 65 28 22 46 49 4c 45 4e 41 4d 45   usage("FILENAME
0550: 20 44 49 52 45 43 54 4f 52 59 2e 2e 2e 22 29 3b   DIRECTORY...");
0560: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 64 20 3d  .+    }.+    d =
0570: 20 6f 70 65 6e 64 69 72 28 67 2e 61 72 67 76 5b   opendir(g.argv[
0580: 69 5d 29 3b 0a 2b 20 20 20 20 69 66 28 20 64 20  i]);.+    if( d 
0590: 29 7b 0a 2b 20 20 20 20 20 20 77 68 69 6c 65 28  ){.+      while(
05a0: 20 28 70 45 6e 74 72 79 3d 72 65 61 64 64 69 72   (pEntry=readdir
05b0: 28 64 29 29 21 3d 30 20 29 7b 0a 2b 20 20 20 20  (d))!=0 ){.+    
05c0: 20 20 20 20 42 6c 6f 62 20 70 61 74 68 3b 0a 2b      Blob path;.+
05d0: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 69 6e 69          blob_ini
05e0: 74 28 26 70 61 74 68 2c 20 30 2c 20 30 29 3b 0a  t(&path, 0, 0);.
05f0: 2b 20 20 20 20 20 20 20 20 69 66 28 20 70 45 6e  +        if( pEn
0600: 74 72 79 2d 3e 64 5f 6e 61 6d 65 5b 30 5d 3d 3d  try->d_name[0]==
0610: 27 2e 27 20 29 7b 0a 2b 20 20 20 20 20 20 20 20  '.' ){.+        
0620: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 2b 20 20 20    continue;.+   
0630: 20 20 20 20 20 7d 0a 2b 20 20 20 20 20 20 20 20       }.+        
0640: 69 66 28 20 66 69 6c 65 5f 69 73 64 69 72 28 70  if( file_isdir(p
0650: 45 6e 74 72 79 2d 3e 64 5f 6e 61 6d 65 29 3d 3d  Entry->d_name)==
0660: 31 20 29 7b 0a 2b 20 20 20 20 20 20 20 20 20 20  1 ){.+          
0670: 63 6f 6e 74 69 6e 75 65 3b 0a 2b 20 20 20 20 20  continue;.+     
0680: 20 20 20 7d 0a 2b 20 20 20 20 20 20 20 20 62 6c     }.+        bl
0690: 6f 62 5f 61 70 70 65 6e 64 66 28 26 70 61 74 68  ob_appendf(&path
06a0: 2c 20 22 25 73 2f 25 73 22 2c 20 67 2e 61 72 67  , "%s/%s", g.arg
06b0: 76 5b 69 5d 2c 20 70 45 6e 74 72 79 2d 3e 64 5f  v[i], pEntry->d_
06c0: 6e 61 6d 65 29 3b 0a 2b 20 20 20 20 20 20 20 20  name);.+        
06d0: 69 66 28 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72  if( blob_read_fr
06e0: 6f 6d 5f 66 69 6c 65 28 26 61 43 6f 6e 74 65 6e  om_file(&aConten
06f0: 74 2c 20 62 6c 6f 62 5f 73 74 72 28 26 70 61 74  t, blob_str(&pat
0700: 68 29 29 3d 3d 2d 31 20 29 7b 0a 2b 20 20 20 20  h))==-1 ){.+    
0710: 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70 61 6e        fossil_pan
0720: 69 63 28 22 53 6f 6d 65 20 75 6e 6b 6e 6f 77 6e  ic("Some unknown
0730: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
0740: 77 68 69 6c 65 20 72 65 61 64 69 6e 67 20 5c 22  while reading \"
0750: 25 73 5c 22 22 2c 20 62 6c 6f 62 5f 73 74 72 28  %s\"", blob_str(
0760: 26 70 61 74 68 29 29 3b 0a 2b 20 20 20 20 20 20  &path));.+      
0770: 20 20 7d 0a 2b 20 20 20 20 20 20 20 20 63 6f 6e    }.+        con
0780: 74 65 6e 74 5f 70 75 74 28 26 61 43 6f 6e 74 65  tent_put(&aConte
0790: 6e 74 2c 20 30 2c 20 30 29 3b 0a 2b 20 20 20 20  nt, 0, 0);.+    
07a0: 20 20 20 20 62 6c 6f 62 5f 72 65 73 65 74 28 26      blob_reset(&
07b0: 70 61 74 68 29 3b 0a 2b 20 20 20 20 20 20 20 20  path);.+        
07c0: 62 6c 6f 62 5f 72 65 73 65 74 28 26 61 43 6f 6e  blob_reset(&aCon
07d0: 74 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 7d 0a  tent);.       }.
07e0: 2d 20 20 20 20 20 20 63 6f 6e 74 65 6e 74 5f 70  -      content_p
07f0: 75 74 28 26 61 43 6f 6e 74 65 6e 74 2c 20 30 2c  ut(&aContent, 0,
0800: 20 30 29 3b 0a 20 20 20 20 20 7d 0a 2d 20 20 7d   0);.     }.-  }
0810: 0a 2d 20 20 65 6c 73 65 20 7b 0a 2d 20 20 20 20  .-  else {.-    
0820: 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 45 6e  fossil_panic("En
0830: 63 6f 75 6e 74 65 72 65 64 20 65 72 72 6f 72 20  countered error 
0840: 25 64 20 77 68 69 6c 65 20 74 72 79 69 6e 67 20  %d while trying 
0850: 74 6f 20 6f 70 65 6e 20 5c 22 25 73 5c 22 2e 22  to open \"%s\"."
0860: 2c 20 65 72 72 6e 6f 2c 20 67 2e 61 72 67 76 5b  , errno, g.argv[
0870: 33 5d 29 3b 0a 2b 20 20 20 20 65 6c 73 65 20 7b  3]);.+    else {
0880: 0a 2b 20 20 20 20 20 20 66 6f 73 73 69 6c 5f 70  .+      fossil_p
0890: 61 6e 69 63 28 22 45 6e 63 6f 75 6e 74 65 72 65  anic("Encountere
08a0: 64 20 65 72 72 6f 72 20 25 64 20 77 68 69 6c 65  d error %d while
08b0: 20 74 72 79 69 6e 67 20 74 6f 20 6f 70 65 6e 20   trying to open 
08c0: 5c 22 25 73 5c 22 2e 22 2c 20 65 72 72 6e 6f 2c  \"%s\".", errno,
08d0: 20 67 2e 61 72 67 76 5b 69 5d 29 3b 0a 2b 20 20   g.argv[i]);.+  
08e0: 20 20 7d 0a 2b 20 20 20 20 63 6c 6f 73 65 64 69    }.+    closedi
08f0: 72 28 64 29 3b 0a 20 20 20 7d 0a 20 0a 20 20 20  r(d);.   }. .   
0900: 72 65 62 75 69 6c 64 5f 64 62 28 30 2c 20 31 29  rebuild_db(0, 1)
0910: 3b 0a                                            ;.