Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Change the "legacy comment printing algorithm" to the "canonical comment printing algorithm". Omit the --comfmtflags and --comment-format global flags. Simplify the comment printing code. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
35302d9e5054c11da68f5a0287d2f751 |
| User & Date: | drh 2025-03-03 12:07:10.230 |
Context
|
2025-03-03
| ||
| 12:39 | Update the change log to report on recent enhancements. check-in: 871b514651 user: drh tags: trunk | |
| 12:07 | Change the "legacy comment printing algorithm" to the "canonical comment printing algorithm". Omit the --comfmtflags and --comment-format global flags. Simplify the comment printing code. check-in: 35302d9e50 user: drh tags: trunk | |
| 09:16 | Removal of duplicate version string for 'fossil help -f -v'. Borrowed from bv-infotool branch. check-in: 1ce93cbbfd user: brickviking tags: trunk | |
Changes
Changes to src/comformat.c.
| ︙ | ︙ | |||
19 20 21 22 23 24 25 | ** text on a TTY. */ #include "config.h" #include "comformat.h" #include <assert.h> #if INTERFACE | | > > > | > > > < < | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
** text on a TTY.
*/
#include "config.h"
#include "comformat.h"
#include <assert.h>
#if INTERFACE
#define COMMENT_PRINT_NONE ((u32)0x00000000) /* No flags */
#define COMMENT_PRINT_CANONICAL ((u32)0x00000001) /* Use canonical algorithm */
#define COMMENT_PRINT_DEFAULT COMMENT_PRINT_CANONICAL /* Default */
#define COMMENT_PRINT_UNSET (-1) /* Not initialized */
/* The canonical comment printing algorithm is recommended. We make
** no promise of on-going support for any of the following flags:
*/
#define COMMENT_PRINT_TRIM_CRLF ((u32)0x00000002) /* Trim leading CR/LF. */
#define COMMENT_PRINT_TRIM_SPACE ((u32)0x00000004) /* Trim leading/trailing. */
#define COMMENT_PRINT_WORD_BREAK ((u32)0x00000008) /* Break lines on words. */
#define COMMENT_PRINT_ORIG_BREAK ((u32)0x00000010) /* Break before original. */
#endif
/********* Code copied from SQLite src/shell.c.in on 2024-09-30 **********/
/* Lookup table to estimate the number of columns consumed by a Unicode
** character.
*/
static const struct {
|
| ︙ | ︙ | |||
481 482 483 484 485 486 487 |
}
if( pzLine ){
*pzLine = zLine + index;
}
}
/*
| | | > | > > > > > > > | | 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 |
}
if( pzLine ){
*pzLine = zLine + index;
}
}
/*
** This is the canonical comment printing algorithm. This is the algorithm
** that is recommended and that is used unless the administrator has made
** special arrangements to use a customized algorithm.
**
** Given a comment string, format that string for printing on a TTY.
** Assume that the output cursor is indent spaces from the left margin
** and that a single line can contain no more than 'width' characters.
** Indent all subsequent lines by 'indent'.
**
** Formatting features:
**
** * Leading whitespace is removed.
** * Internal whitespace sequences are changed into a single space (0x20)
** character.
** * Lines are broken at a space, or at a hyphen ("-") whenever possible.
**
** Returns the number of new lines emitted.
*/
static int comment_print_canonical(
const char *zText, /* The comment text to be printed. */
int indent, /* Number of spaces to indent each non-initial line. */
int width /* Maximum number of characters per line. */
){
int maxChars = width - indent;
int si, sk, i, k, kc;
int doIndent = 0;
|
| ︙ | ︙ | |||
580 581 582 583 584 585 586 | /* ** This is the comment printing function. The comment printing algorithm ** contained within it attempts to preserve the formatting present within ** the comment string itself while honoring line width limitations. There ** are several flags that modify the default behavior of this function: ** | | > > > > | > | | 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 | /* ** This is the comment printing function. The comment printing algorithm ** contained within it attempts to preserve the formatting present within ** the comment string itself while honoring line width limitations. There ** are several flags that modify the default behavior of this function: ** ** COMMENT_PRINT_CANONICAL: Use the canonical printing algorithm: ** * Omit leading and trailing whitespace ** * Collapse internal whitespace into a ** single space (0x20) character. ** * Attempt to break lines at whitespace ** or hyphens. ** This is the recommended algorithm and is ** used in most cases. ** ** COMMENT_PRINT_TRIM_CRLF: Trims leading and trailing carriage-returns ** and line-feeds where they do not materially ** impact pre-existing formatting (i.e. at the ** start of the comment string -AND- right ** before line indentation). This flag does ** not apply to the legacy comment printing |
| ︙ | ︙ | |||
629 630 631 632 633 634 635 |
const char *zText, /* The comment text to be printed. */
const char *zOrigText, /* Original comment text ONLY, may be NULL. */
int indent, /* Spaces to indent each non-initial line. */
int width, /* Maximum number of characters per line. */
int flags /* Zero or more "COMMENT_PRINT_*" flags. */
){
int maxChars = width - indent;
| > | > > > > > > > | | | | | | < < < | | | | | | | | | | | | | | | | | | | | | | | | | > < | | | | 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 |
const char *zText, /* The comment text to be printed. */
const char *zOrigText, /* Original comment text ONLY, may be NULL. */
int indent, /* Spaces to indent each non-initial line. */
int width, /* Maximum number of characters per line. */
int flags /* Zero or more "COMMENT_PRINT_*" flags. */
){
int maxChars = width - indent;
if( flags & COMMENT_PRINT_CANONICAL ){
/* Use the canonical algorithm. This is what happens in almost
** all cases. */
return comment_print_canonical(zText, indent, width);
}else{
/* The remaining is a more complex formatting algorithm that is very
** seldom used and is considered deprecated.
*/
int trimCrLf = flags & COMMENT_PRINT_TRIM_CRLF;
int trimSpace = flags & COMMENT_PRINT_TRIM_SPACE;
int wordBreak = flags & COMMENT_PRINT_WORD_BREAK;
int origBreak = flags & COMMENT_PRINT_ORIG_BREAK;
int lineCnt = 0;
const char *zLine;
if( width<0 ){
comment_set_maxchars(indent, &maxChars);
}
if( zText==0 ) zText = "(NULL)";
if( maxChars<=0 ){
maxChars = strlen(zText);
}
if( trimSpace ){
while( fossil_isspace(zText[0]) ){ zText++; }
}
if( zText[0]==0 ){
fossil_print("\n");
lineCnt++;
return lineCnt;
}
zLine = zText;
for(;;){
comment_print_line(zOrigText, zLine, indent, zLine>zText ? indent : 0,
maxChars, trimCrLf, trimSpace, wordBreak, origBreak,
&lineCnt, &zLine);
if( zLine==0 ) break;
while( fossil_isspace(zLine[0]) ) zLine++;
if( zLine[0]==0 ) break;
}
return lineCnt;
}
}
/*
** Return the "COMMENT_PRINT_*" flags specified by the following sources,
** evaluated in the following cascading order:
**
** 1. The local (per-repository) "comment-format" setting.
** 2. The global (all-repositories) "comment-format" setting.
** 3. The default value COMMENT_PRINT_DEFAULT.
*/
int get_comment_format(){
int comFmtFlags;
/* We must cache this result, else running the timeline can end up
** querying the comment-format setting from the global db once per
** timeline entry, which brings it to a crawl if that db is
|
| ︙ | ︙ | |||
710 711 712 713 714 715 716 717 718 719 720 | ** COMMAND: test-comment-format ** ** Usage: %fossil test-comment-format ?OPTIONS? PREFIX TEXT ?ORIGTEXT? ** ** Test comment formatting and printing. Use for testing only. ** ** Options: ** --file The comment text is really just a file name to ** read it from ** --decode Decode the text using the same method used when ** handling the value of a C-card from a manifest. | > > > > > > > > > | < < < < | | | 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 |
** COMMAND: test-comment-format
**
** Usage: %fossil test-comment-format ?OPTIONS? PREFIX TEXT ?ORIGTEXT?
**
** Test comment formatting and printing. Use for testing only.
**
** Options:
** --canonical Use the canonical comment printing algorithm:
** * Omit leading/trailing whitespace
** * Collapse internal whitespace into a single
** space character.
** * Attempt to break lines at whitespace or at
** a hyphen.
** --file The comment text is really just a file name to
** read it from
** --decode Decode the text using the same method used when
** handling the value of a C-card from a manifest.
** --indent Number of spaces to indent (default (-1) is to
** auto-detect). Zero means no indent.
** --origbreak Attempt to break when the original comment text
** is detected
** --trimcrlf Enable trimming of leading/trailing CR/LF
** --trimspace Enable trimming of leading/trailing spaces
** --wordbreak Attempt to break lines on word boundaries
** -W|--width NUM Width of lines (default (-1) is to auto-detect).
** Zero means no limit.
*/
void test_comment_format(void){
const char *zWidth;
const char *zIndent;
const char *zPrefix;
char *zText;
char *zOrigText;
int indent, width;
int fromFile = find_option("file", 0, 0)!=0;
int decode = find_option("decode", 0, 0)!=0;
int flags = COMMENT_PRINT_NONE;
if( find_option("original",0,0) ){
flags |= COMMENT_PRINT_CANONICAL;
}
if( find_option("trimcrlf", 0, 0) ){
flags |= COMMENT_PRINT_TRIM_CRLF;
}
if( find_option("trimspace", 0, 0) ){
flags |= COMMENT_PRINT_TRIM_SPACE;
}
|
| ︙ | ︙ |
Changes to src/db.c.
| ︙ | ︙ | |||
4638 4639 4640 4641 4642 4643 4644 | /* ** SETTING: clearsign boolean default=off ** When enabled, fossil will attempt to sign all commits ** with gpg or ssh. When disabled, commits will be unsigned. */ /* ** SETTING: comment-format width=16 default=1 | | < < < | > > > > < | | < < < | 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 | /* ** SETTING: clearsign boolean default=off ** When enabled, fossil will attempt to sign all commits ** with gpg or ssh. When disabled, commits will be unsigned. */ /* ** SETTING: comment-format width=16 default=1 ** Set the algorithm for printing timeline comments to the console. ** ** Possible values are: ** 1 Use the original comment printing algorithm: ** * Leading and trialing whitespace is removed ** * Internal whitespace is converted into a single space (0x20) ** * Line breaks occurs at whitespace or hyphens if possible ** This is the recommended value and the default. ** ** Or a bitwise combination of the following flags: ** 2 Trim leading and trailing CR and LF characters. ** 4 Trim leading and trailing white space characters. ** 8 Attempt to break lines on word boundaries. ** 16 Break lines before the original comment embedded in other text. ** ** Note: To preserve line breaks and/or other whitespace within comment text, ** make this setting some integer value that omits the "1" bit. */ /* ** SETTING: crlf-glob width=40 versionable block-text ** The VALUE of this setting is a list of GLOB patterns matching files ** in which it is allowed to have CR, CR+LF or mixed line endings, ** suppressing Fossil's normal warning about this. Set it to "*" to ** disable CR+LF checking entirely. Example: *.md,*.txt |
| ︙ | ︙ |
Changes to src/dispatch.c.
| ︙ | ︙ | |||
1355 1356 1357 1358 1359 1360 1361 | static const char zOptions[] = @ Command-line options common to all commands: @ @ --args FILENAME Read additional arguments and options from FILENAME @ --case-sensitive BOOL Set case sensitivity for file names @ --cgitrace Active CGI tracing @ --chdir PATH Change to PATH before performing any operations | < < | 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 | static const char zOptions[] = @ Command-line options common to all commands: @ @ --args FILENAME Read additional arguments and options from FILENAME @ --case-sensitive BOOL Set case sensitivity for file names @ --cgitrace Active CGI tracing @ --chdir PATH Change to PATH before performing any operations @ --errorlog FILENAME Log errors to FILENAME @ --help Show help on the command rather than running it @ --httptrace Trace outbound HTTP requests @ --localtime Display times using the local timezone @ --nocgi Do not act as CGI @ --no-th-hook Do not run TH1 hooks @ --quiet Reduce the amount of output |
| ︙ | ︙ |
Changes to src/main.c.
| ︙ | ︙ | |||
643 644 645 646 647 648 649 |
/*
** This function attempts to find command line options known to contain
** bitwise flags and initializes the associated global variables. After
** this function executes, all global variables (i.e. in the "g" struct)
** containing option-settable bitwise flag fields must be initialized.
*/
static void fossil_init_flags_from_options(void){
| < < < < < < < | < | 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 |
/*
** This function attempts to find command line options known to contain
** bitwise flags and initializes the associated global variables. After
** this function executes, all global variables (i.e. in the "g" struct)
** containing option-settable bitwise flag fields must be initialized.
*/
static void fossil_init_flags_from_options(void){
g.comFmtFlags = COMMENT_PRINT_UNSET; /* Use comment-format flag */
}
/*
** Check to see if the Fossil binary contains an appended repository
** file using the appendvfs extension. If so, change command-line arguments
** to cause Fossil to launch with "fossil ui" on that repo.
*/
|
| ︙ | ︙ |