Fossil SCM
Merge the minor fixes on the dmitry-fixes branch into trunk.
Commit
ce354d0a9f62cde0122af374cd18c22009b735e6
Parent
2d1620830e23f7c…
6 files changed
+4
-3
+3
-3
+2
-2
+8
+2
-2
+1
-1
+4
-3
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -415,11 +415,12 @@ | ||
| 415 | 415 | */ |
| 416 | 416 | static void prepare_commit_comment( |
| 417 | 417 | Blob *pComment, |
| 418 | 418 | char *zInit, |
| 419 | 419 | const char *zBranch, |
| 420 | - int parent_rid | |
| 420 | + int parent_rid, | |
| 421 | + const char *zUserOvrd | |
| 421 | 422 | ){ |
| 422 | 423 | const char *zEditor; |
| 423 | 424 | char *zCmd; |
| 424 | 425 | char *zFile; |
| 425 | 426 | Blob text, line; |
| @@ -430,11 +431,11 @@ | ||
| 430 | 431 | "\n" |
| 431 | 432 | "# Enter comments on this check-in. Lines beginning with # are ignored.\n" |
| 432 | 433 | "# The check-in comment follows wiki formatting rules.\n" |
| 433 | 434 | "#\n", -1 |
| 434 | 435 | ); |
| 435 | - blob_appendf(&text, "# user: %s\n", g.zLogin); | |
| 436 | + blob_appendf(&text, "# user: %s\n", zUserOvrd ? zUserOvrd : g.zLogin); | |
| 436 | 437 | if( zBranch && zBranch[0] ){ |
| 437 | 438 | blob_appendf(&text, "# tags: %s\n#\n", zBranch); |
| 438 | 439 | }else{ |
| 439 | 440 | char *zTags = info_tags_of_checkin(parent_rid, 1); |
| 440 | 441 | if( zTags ) blob_appendf(&text, "# tags: %z\n#\n", zTags); |
| @@ -1034,11 +1035,11 @@ | ||
| 1034 | 1035 | }else if( zComFile ){ |
| 1035 | 1036 | blob_zero(&comment); |
| 1036 | 1037 | blob_read_from_file(&comment, zComFile); |
| 1037 | 1038 | }else{ |
| 1038 | 1039 | char *zInit = db_text(0, "SELECT value FROM vvar WHERE name='ci-comment'"); |
| 1039 | - prepare_commit_comment(&comment, zInit, zBranch, vid); | |
| 1040 | + prepare_commit_comment(&comment, zInit, zBranch, vid, zUserOvrd); | |
| 1040 | 1041 | free(zInit); |
| 1041 | 1042 | } |
| 1042 | 1043 | if( blob_size(&comment)==0 ){ |
| 1043 | 1044 | Blob ans; |
| 1044 | 1045 | blob_zero(&ans); |
| 1045 | 1046 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -415,11 +415,12 @@ | |
| 415 | */ |
| 416 | static void prepare_commit_comment( |
| 417 | Blob *pComment, |
| 418 | char *zInit, |
| 419 | const char *zBranch, |
| 420 | int parent_rid |
| 421 | ){ |
| 422 | const char *zEditor; |
| 423 | char *zCmd; |
| 424 | char *zFile; |
| 425 | Blob text, line; |
| @@ -430,11 +431,11 @@ | |
| 430 | "\n" |
| 431 | "# Enter comments on this check-in. Lines beginning with # are ignored.\n" |
| 432 | "# The check-in comment follows wiki formatting rules.\n" |
| 433 | "#\n", -1 |
| 434 | ); |
| 435 | blob_appendf(&text, "# user: %s\n", g.zLogin); |
| 436 | if( zBranch && zBranch[0] ){ |
| 437 | blob_appendf(&text, "# tags: %s\n#\n", zBranch); |
| 438 | }else{ |
| 439 | char *zTags = info_tags_of_checkin(parent_rid, 1); |
| 440 | if( zTags ) blob_appendf(&text, "# tags: %z\n#\n", zTags); |
| @@ -1034,11 +1035,11 @@ | |
| 1034 | }else if( zComFile ){ |
| 1035 | blob_zero(&comment); |
| 1036 | blob_read_from_file(&comment, zComFile); |
| 1037 | }else{ |
| 1038 | char *zInit = db_text(0, "SELECT value FROM vvar WHERE name='ci-comment'"); |
| 1039 | prepare_commit_comment(&comment, zInit, zBranch, vid); |
| 1040 | free(zInit); |
| 1041 | } |
| 1042 | if( blob_size(&comment)==0 ){ |
| 1043 | Blob ans; |
| 1044 | blob_zero(&ans); |
| 1045 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -415,11 +415,12 @@ | |
| 415 | */ |
| 416 | static void prepare_commit_comment( |
| 417 | Blob *pComment, |
| 418 | char *zInit, |
| 419 | const char *zBranch, |
| 420 | int parent_rid, |
| 421 | const char *zUserOvrd |
| 422 | ){ |
| 423 | const char *zEditor; |
| 424 | char *zCmd; |
| 425 | char *zFile; |
| 426 | Blob text, line; |
| @@ -430,11 +431,11 @@ | |
| 431 | "\n" |
| 432 | "# Enter comments on this check-in. Lines beginning with # are ignored.\n" |
| 433 | "# The check-in comment follows wiki formatting rules.\n" |
| 434 | "#\n", -1 |
| 435 | ); |
| 436 | blob_appendf(&text, "# user: %s\n", zUserOvrd ? zUserOvrd : g.zLogin); |
| 437 | if( zBranch && zBranch[0] ){ |
| 438 | blob_appendf(&text, "# tags: %s\n#\n", zBranch); |
| 439 | }else{ |
| 440 | char *zTags = info_tags_of_checkin(parent_rid, 1); |
| 441 | if( zTags ) blob_appendf(&text, "# tags: %z\n#\n", zTags); |
| @@ -1034,11 +1035,11 @@ | |
| 1035 | }else if( zComFile ){ |
| 1036 | blob_zero(&comment); |
| 1037 | blob_read_from_file(&comment, zComFile); |
| 1038 | }else{ |
| 1039 | char *zInit = db_text(0, "SELECT value FROM vvar WHERE name='ci-comment'"); |
| 1040 | prepare_commit_comment(&comment, zInit, zBranch, vid, zUserOvrd); |
| 1041 | free(zInit); |
| 1042 | } |
| 1043 | if( blob_size(&comment)==0 ){ |
| 1044 | Blob ans; |
| 1045 | blob_zero(&ans); |
| 1046 |
+3
-3
| --- src/rebuild.c | ||
| +++ src/rebuild.c | ||
| @@ -338,11 +338,11 @@ | ||
| 338 | 338 | int incrSize; |
| 339 | 339 | |
| 340 | 340 | bag_init(&bagDone); |
| 341 | 341 | ttyOutput = doOut; |
| 342 | 342 | processCnt = 0; |
| 343 | - if (!g.fQuiet) { | |
| 343 | + if (ttyOutput && !g.fQuiet) { | |
| 344 | 344 | percent_complete(0); |
| 345 | 345 | } |
| 346 | 346 | rebuild_update_schema(); |
| 347 | 347 | for(;;){ |
| 348 | 348 | zTable = db_text(0, |
| @@ -410,16 +410,16 @@ | ||
| 410 | 410 | } |
| 411 | 411 | } |
| 412 | 412 | db_finalize(&s); |
| 413 | 413 | manifest_crosslink_end(); |
| 414 | 414 | rebuild_tag_trunk(); |
| 415 | - if( !g.fQuiet && totalSize>0 ){ | |
| 415 | + if( ttyOutput && !g.fQuiet && totalSize>0 ){ | |
| 416 | 416 | processCnt += incrSize; |
| 417 | 417 | percent_complete((processCnt*1000)/totalSize); |
| 418 | 418 | } |
| 419 | 419 | if( doClustering ) create_cluster(); |
| 420 | - if( !g.fQuiet && totalSize>0 ){ | |
| 420 | + if( ttyOutput && !g.fQuiet && totalSize>0 ){ | |
| 421 | 421 | processCnt += incrSize; |
| 422 | 422 | percent_complete((processCnt*1000)/totalSize); |
| 423 | 423 | } |
| 424 | 424 | if(!g.fQuiet && ttyOutput ){ |
| 425 | 425 | fossil_print("\n"); |
| 426 | 426 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -338,11 +338,11 @@ | |
| 338 | int incrSize; |
| 339 | |
| 340 | bag_init(&bagDone); |
| 341 | ttyOutput = doOut; |
| 342 | processCnt = 0; |
| 343 | if (!g.fQuiet) { |
| 344 | percent_complete(0); |
| 345 | } |
| 346 | rebuild_update_schema(); |
| 347 | for(;;){ |
| 348 | zTable = db_text(0, |
| @@ -410,16 +410,16 @@ | |
| 410 | } |
| 411 | } |
| 412 | db_finalize(&s); |
| 413 | manifest_crosslink_end(); |
| 414 | rebuild_tag_trunk(); |
| 415 | if( !g.fQuiet && totalSize>0 ){ |
| 416 | processCnt += incrSize; |
| 417 | percent_complete((processCnt*1000)/totalSize); |
| 418 | } |
| 419 | if( doClustering ) create_cluster(); |
| 420 | if( !g.fQuiet && totalSize>0 ){ |
| 421 | processCnt += incrSize; |
| 422 | percent_complete((processCnt*1000)/totalSize); |
| 423 | } |
| 424 | if(!g.fQuiet && ttyOutput ){ |
| 425 | fossil_print("\n"); |
| 426 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -338,11 +338,11 @@ | |
| 338 | int incrSize; |
| 339 | |
| 340 | bag_init(&bagDone); |
| 341 | ttyOutput = doOut; |
| 342 | processCnt = 0; |
| 343 | if (ttyOutput && !g.fQuiet) { |
| 344 | percent_complete(0); |
| 345 | } |
| 346 | rebuild_update_schema(); |
| 347 | for(;;){ |
| 348 | zTable = db_text(0, |
| @@ -410,16 +410,16 @@ | |
| 410 | } |
| 411 | } |
| 412 | db_finalize(&s); |
| 413 | manifest_crosslink_end(); |
| 414 | rebuild_tag_trunk(); |
| 415 | if( ttyOutput && !g.fQuiet && totalSize>0 ){ |
| 416 | processCnt += incrSize; |
| 417 | percent_complete((processCnt*1000)/totalSize); |
| 418 | } |
| 419 | if( doClustering ) create_cluster(); |
| 420 | if( ttyOutput && !g.fQuiet && totalSize>0 ){ |
| 421 | processCnt += incrSize; |
| 422 | percent_complete((processCnt*1000)/totalSize); |
| 423 | } |
| 424 | if(!g.fQuiet && ttyOutput ){ |
| 425 | fossil_print("\n"); |
| 426 |
+2
-2
| --- src/rss.c | ||
| +++ src/rss.c | ||
| @@ -94,11 +94,11 @@ | ||
| 94 | 94 | } |
| 95 | 95 | |
| 96 | 96 | zPubDate = cgi_rfc822_datestamp(time(NULL)); |
| 97 | 97 | |
| 98 | 98 | @ <?xml version="1.0"?> |
| 99 | - @ <rss version="2.0"> | |
| 99 | + @ <rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> | |
| 100 | 100 | @ <channel> |
| 101 | 101 | @ <title>%h(zProjectName)</title> |
| 102 | 102 | @ <link>%s(g.zBaseURL)</link> |
| 103 | 103 | @ <description>%h(zProjectDescr)</description> |
| 104 | 104 | @ <pubDate>%s(zPubDate)</pubDate> |
| @@ -130,11 +130,11 @@ | ||
| 130 | 130 | @ <item> |
| 131 | 131 | @ <title>%s(zPrefix)%h(zCom)</title> |
| 132 | 132 | @ <link>%s(g.zBaseURL)/info/%s(zId)</link> |
| 133 | 133 | @ <description>%s(zPrefix)%h(zCom)</description> |
| 134 | 134 | @ <pubDate>%s(zDate)</pubDate> |
| 135 | - @ <author>%h(zAuthor)</author> | |
| 135 | + @ <dc:creator>%h(zAuthor)</dc:creator> | |
| 136 | 136 | @ <guid>%s(g.zBaseURL)/info/%s(zId)</guid> |
| 137 | 137 | @ </item> |
| 138 | 138 | free(zDate); |
| 139 | 139 | nLine++; |
| 140 | 140 | } |
| 141 | 141 |
| --- src/rss.c | |
| +++ src/rss.c | |
| @@ -94,11 +94,11 @@ | |
| 94 | } |
| 95 | |
| 96 | zPubDate = cgi_rfc822_datestamp(time(NULL)); |
| 97 | |
| 98 | @ <?xml version="1.0"?> |
| 99 | @ <rss version="2.0"> |
| 100 | @ <channel> |
| 101 | @ <title>%h(zProjectName)</title> |
| 102 | @ <link>%s(g.zBaseURL)</link> |
| 103 | @ <description>%h(zProjectDescr)</description> |
| 104 | @ <pubDate>%s(zPubDate)</pubDate> |
| @@ -130,11 +130,11 @@ | |
| 130 | @ <item> |
| 131 | @ <title>%s(zPrefix)%h(zCom)</title> |
| 132 | @ <link>%s(g.zBaseURL)/info/%s(zId)</link> |
| 133 | @ <description>%s(zPrefix)%h(zCom)</description> |
| 134 | @ <pubDate>%s(zDate)</pubDate> |
| 135 | @ <author>%h(zAuthor)</author> |
| 136 | @ <guid>%s(g.zBaseURL)/info/%s(zId)</guid> |
| 137 | @ </item> |
| 138 | free(zDate); |
| 139 | nLine++; |
| 140 | } |
| 141 |
| --- src/rss.c | |
| +++ src/rss.c | |
| @@ -94,11 +94,11 @@ | |
| 94 | } |
| 95 | |
| 96 | zPubDate = cgi_rfc822_datestamp(time(NULL)); |
| 97 | |
| 98 | @ <?xml version="1.0"?> |
| 99 | @ <rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> |
| 100 | @ <channel> |
| 101 | @ <title>%h(zProjectName)</title> |
| 102 | @ <link>%s(g.zBaseURL)</link> |
| 103 | @ <description>%h(zProjectDescr)</description> |
| 104 | @ <pubDate>%s(zPubDate)</pubDate> |
| @@ -130,11 +130,11 @@ | |
| 130 | @ <item> |
| 131 | @ <title>%s(zPrefix)%h(zCom)</title> |
| 132 | @ <link>%s(g.zBaseURL)/info/%s(zId)</link> |
| 133 | @ <description>%s(zPrefix)%h(zCom)</description> |
| 134 | @ <pubDate>%s(zDate)</pubDate> |
| 135 | @ <dc:creator>%h(zAuthor)</dc:creator> |
| 136 | @ <guid>%s(g.zBaseURL)/info/%s(zId)</guid> |
| 137 | @ </item> |
| 138 | free(zDate); |
| 139 | nLine++; |
| 140 | } |
| 141 |
+8
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -335,10 +335,18 @@ | ||
| 335 | 335 | if( az ){ zCap[i++] = 'z'; } |
| 336 | 336 | |
| 337 | 337 | zCap[i] = 0; |
| 338 | 338 | zPw = P("pw"); |
| 339 | 339 | zLogin = P("login"); |
| 340 | + if( strlen(zLogin)==0 ){ | |
| 341 | + style_header("User Creation Error"); | |
| 342 | + @ <span class="loginError">Empty login not allowed.</span> | |
| 343 | + @ | |
| 344 | + @ <p><a href="setup_uedit?id=%d(uid)">[Bummer]</a></p> | |
| 345 | + style_footer(); | |
| 346 | + return; | |
| 347 | + } | |
| 340 | 348 | if( isValidPwString(zPw) ){ |
| 341 | 349 | zPw = sha1_shared_secret(zPw, zLogin, 0); |
| 342 | 350 | }else{ |
| 343 | 351 | zPw = db_text(0, "SELECT pw FROM user WHERE uid=%d", uid); |
| 344 | 352 | } |
| 345 | 353 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -335,10 +335,18 @@ | |
| 335 | if( az ){ zCap[i++] = 'z'; } |
| 336 | |
| 337 | zCap[i] = 0; |
| 338 | zPw = P("pw"); |
| 339 | zLogin = P("login"); |
| 340 | if( isValidPwString(zPw) ){ |
| 341 | zPw = sha1_shared_secret(zPw, zLogin, 0); |
| 342 | }else{ |
| 343 | zPw = db_text(0, "SELECT pw FROM user WHERE uid=%d", uid); |
| 344 | } |
| 345 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -335,10 +335,18 @@ | |
| 335 | if( az ){ zCap[i++] = 'z'; } |
| 336 | |
| 337 | zCap[i] = 0; |
| 338 | zPw = P("pw"); |
| 339 | zLogin = P("login"); |
| 340 | if( strlen(zLogin)==0 ){ |
| 341 | style_header("User Creation Error"); |
| 342 | @ <span class="loginError">Empty login not allowed.</span> |
| 343 | @ |
| 344 | @ <p><a href="setup_uedit?id=%d(uid)">[Bummer]</a></p> |
| 345 | style_footer(); |
| 346 | return; |
| 347 | } |
| 348 | if( isValidPwString(zPw) ){ |
| 349 | zPw = sha1_shared_secret(zPw, zLogin, 0); |
| 350 | }else{ |
| 351 | zPw = db_text(0, "SELECT pw FROM user WHERE uid=%d", uid); |
| 352 | } |
| 353 |
+2
-2
| --- www/reference.wiki | ||
| +++ www/reference.wiki | ||
| @@ -94,11 +94,11 @@ | ||
| 94 | 94 | <tr> |
| 95 | 95 | <td><a href="#checkout">checkout</a>*</td> |
| 96 | 96 | <td><a href="#descendants">descendants</a></td> |
| 97 | 97 | <td><a href="#mv">mv</a>*</td> |
| 98 | 98 | <td><a href="#rm">rm</a>*</td> |
| 99 | - <td><a href="#setting">unset</a></td> | |
| 99 | + <td><a href="#settings">unset</a></td> | |
| 100 | 100 | </tr> |
| 101 | 101 | <tr> |
| 102 | 102 | <td><a href="#commit">ci</a></td> |
| 103 | 103 | <td><a href="#diff">diff</a></td> |
| 104 | 104 | <td><a href="#new">new</a>*</td> |
| @@ -114,11 +114,11 @@ | ||
| 114 | 114 | </tr> |
| 115 | 115 | <tr> |
| 116 | 116 | <td><a href="#clone">clone</a></td> |
| 117 | 117 | <td><a href="#diff">gdiff</a></td> |
| 118 | 118 | <td><a href="#pull">pull</a></td> |
| 119 | - <td><a href="#setting">settings</a></td> | |
| 119 | + <td><a href="#settings">settings</a></td> | |
| 120 | 120 | <td><a href="#version">version</a>*</td> |
| 121 | 121 | </tr> |
| 122 | 122 | <tr> |
| 123 | 123 | <td><a href="#close">close</a></td> |
| 124 | 124 | <td><a href="#help">help</a></td> |
| 125 | 125 |
| --- www/reference.wiki | |
| +++ www/reference.wiki | |
| @@ -94,11 +94,11 @@ | |
| 94 | <tr> |
| 95 | <td><a href="#checkout">checkout</a>*</td> |
| 96 | <td><a href="#descendants">descendants</a></td> |
| 97 | <td><a href="#mv">mv</a>*</td> |
| 98 | <td><a href="#rm">rm</a>*</td> |
| 99 | <td><a href="#setting">unset</a></td> |
| 100 | </tr> |
| 101 | <tr> |
| 102 | <td><a href="#commit">ci</a></td> |
| 103 | <td><a href="#diff">diff</a></td> |
| 104 | <td><a href="#new">new</a>*</td> |
| @@ -114,11 +114,11 @@ | |
| 114 | </tr> |
| 115 | <tr> |
| 116 | <td><a href="#clone">clone</a></td> |
| 117 | <td><a href="#diff">gdiff</a></td> |
| 118 | <td><a href="#pull">pull</a></td> |
| 119 | <td><a href="#setting">settings</a></td> |
| 120 | <td><a href="#version">version</a>*</td> |
| 121 | </tr> |
| 122 | <tr> |
| 123 | <td><a href="#close">close</a></td> |
| 124 | <td><a href="#help">help</a></td> |
| 125 |
| --- www/reference.wiki | |
| +++ www/reference.wiki | |
| @@ -94,11 +94,11 @@ | |
| 94 | <tr> |
| 95 | <td><a href="#checkout">checkout</a>*</td> |
| 96 | <td><a href="#descendants">descendants</a></td> |
| 97 | <td><a href="#mv">mv</a>*</td> |
| 98 | <td><a href="#rm">rm</a>*</td> |
| 99 | <td><a href="#settings">unset</a></td> |
| 100 | </tr> |
| 101 | <tr> |
| 102 | <td><a href="#commit">ci</a></td> |
| 103 | <td><a href="#diff">diff</a></td> |
| 104 | <td><a href="#new">new</a>*</td> |
| @@ -114,11 +114,11 @@ | |
| 114 | </tr> |
| 115 | <tr> |
| 116 | <td><a href="#clone">clone</a></td> |
| 117 | <td><a href="#diff">gdiff</a></td> |
| 118 | <td><a href="#pull">pull</a></td> |
| 119 | <td><a href="#settings">settings</a></td> |
| 120 | <td><a href="#version">version</a>*</td> |
| 121 | </tr> |
| 122 | <tr> |
| 123 | <td><a href="#close">close</a></td> |
| 124 | <td><a href="#help">help</a></td> |
| 125 |
+1
-1
| --- www/wikitheory.wiki | ||
| +++ www/wikitheory.wiki | ||
| @@ -59,11 +59,11 @@ | ||
| 59 | 59 | Files in the source tree that use the ".wiki" suffix can be accessed |
| 60 | 60 | and displayed using special URLs to the fossil server. This allows |
| 61 | 61 | project documentation to be stored in the source tree and accessed |
| 62 | 62 | online. (Details are described [./embeddeddoc.wiki | separately].) |
| 63 | 63 | |
| 64 | -Some project prefer to store their documentation in wiki. There is nothing | |
| 64 | +Some projects prefer to store their documentation in wiki. There is nothing | |
| 65 | 65 | wrong with that. But other projects prefer to keep documentation as part |
| 66 | 66 | of the source tree, so that it is versioned along with the source tree and |
| 67 | 67 | so that only developers with check-in privileges can change it. |
| 68 | 68 | Embedded documentation serves this latter purpose. Both forms of documentation |
| 69 | 69 | use the exact same wiki markup language. Some projects may choose to |
| 70 | 70 |
| --- www/wikitheory.wiki | |
| +++ www/wikitheory.wiki | |
| @@ -59,11 +59,11 @@ | |
| 59 | Files in the source tree that use the ".wiki" suffix can be accessed |
| 60 | and displayed using special URLs to the fossil server. This allows |
| 61 | project documentation to be stored in the source tree and accessed |
| 62 | online. (Details are described [./embeddeddoc.wiki | separately].) |
| 63 | |
| 64 | Some project prefer to store their documentation in wiki. There is nothing |
| 65 | wrong with that. But other projects prefer to keep documentation as part |
| 66 | of the source tree, so that it is versioned along with the source tree and |
| 67 | so that only developers with check-in privileges can change it. |
| 68 | Embedded documentation serves this latter purpose. Both forms of documentation |
| 69 | use the exact same wiki markup language. Some projects may choose to |
| 70 |
| --- www/wikitheory.wiki | |
| +++ www/wikitheory.wiki | |
| @@ -59,11 +59,11 @@ | |
| 59 | Files in the source tree that use the ".wiki" suffix can be accessed |
| 60 | and displayed using special URLs to the fossil server. This allows |
| 61 | project documentation to be stored in the source tree and accessed |
| 62 | online. (Details are described [./embeddeddoc.wiki | separately].) |
| 63 | |
| 64 | Some projects prefer to store their documentation in wiki. There is nothing |
| 65 | wrong with that. But other projects prefer to keep documentation as part |
| 66 | of the source tree, so that it is versioned along with the source tree and |
| 67 | so that only developers with check-in privileges can change it. |
| 68 | Embedded documentation serves this latter purpose. Both forms of documentation |
| 69 | use the exact same wiki markup language. Some projects may choose to |
| 70 |