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 ;.