Index: src/add.c ================================================================== --- src/add.c +++ src/add.c @@ -271,10 +271,103 @@ free(zName); } db_multi_exec("DELETE FROM vfile WHERE deleted AND rid=0"); db_end_transaction(0); } + +/* +** COMMAND: addremove ?--dotfiles? ?--ignore GLOBPATTERN? +** +** Usage: %fossil addremove +** +** If used in a checkout, the current checkout file tree is synchronized +** with the repository: +** * all files, existing in the file tree but not in the repository +** (files displayed using the extra command) +** are added to the repository - see also add +** * all files, existing in the repository, not existing in the file tree +** (files displayed as MISSING using the status command) +** are removed from the repository - see also rm +** The command does not commit! +** +** This command can be used to track third party software. +*/ +void import_cmd(void){ + Blob path; + const char *zIgnoreFlag = find_option("ignore",0,1); + int allFlag = find_option("dotfiles",0,0)!=0; + int n; + Stmt q; + int vid; + Blob repo; + int addons = 0; + int deletes = 0; + + if( zIgnoreFlag==0 ){ + zIgnoreFlag = db_get("ignore-glob", 0); + } + db_must_be_within_tree(); + vid = db_lget_int("checkout",0); + if( vid==0 ){ + fossil_panic("no checkout to add to"); + } + db_begin_transaction(); + db_multi_exec("CREATE TEMP TABLE sfile(x TEXT PRIMARY KEY)"); + n = strlen(g.zLocalRoot); + blob_init(&path, g.zLocalRoot, n-1); + /* now we read the complete file structure into a temp table */ + vfile_scan(0, &path, blob_size(&path), allFlag); + if( file_tree_name(g.zRepositoryName, &repo, 0) ){ + db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo); + } + printf("importing checkout root '%s'\ninto repository '%s':\n", + g.zLocalRoot,g.zRepositoryName); + /* step 1: search for extra files */ + db_prepare(&q, + "SELECT x, %Q || x FROM sfile" + " WHERE x NOT IN ('manifest','manifest.uuid','_FOSSIL_'," + "'_FOSSIL_-journal','.fos','.fos-journal'," + "'_FOSSIL_-wal','_FOSSIL_-shm','.fos-wal'," + "'.fos-shm')" + " AND NOT %s" + " ORDER BY 1", + g.zLocalRoot, + glob_expr("x", zIgnoreFlag) + ); + while( db_step(&q)==SQLITE_ROW ){ + Blob omit; + + blob_zero(&omit); + add_one_file(db_column_text(&q, 1), vid, &omit); + addons++; + } + db_finalize(&q); + /* step 2: search for missing files */ + db_prepare(&q, + "SELECT pathname,%Q || pathname,deleted FROM vfile" + " WHERE deleted!=1" + " ORDER BY 1", + g.zLocalRoot + ); + while( db_step(&q)==SQLITE_ROW ){ + const char * zFile; + const char * zPath; + + zFile = db_column_text(&q, 0); + zPath = db_column_text(&q, 1); + if( !file_isfile(zPath) ){ + db_multi_exec("UPDATE vfile SET deleted=1 WHERE pathname=%Q", zFile); + printf("DELETED %s\n", zFile); + deletes--; + } + } + db_finalize(&q); + /* show cmmand summary */ + printf("added %d files, deleted %d files\n",addons,deletes); + + db_end_transaction(0); +} /* ** Rename a single file. ** ** The original name of the file is zOrig. The new filename is zNew. @@ -295,12 +388,12 @@ ** or: %fossil mv|rename OLDNAME... DIR ** ** Move or rename one or more files within the tree ** ** This command does not rename the files on disk. This command merely -** records the fact that filenames have changed so that appropriate notations -** can be made at the next commit/checkin. +** records the fact that filenames have changed so that appropriate +** notations can be made at the next commit/checkin. */ void mv_cmd(void){ int i; int vid; char *zDest; Index: src/allrepo.c ================================================================== --- src/allrepo.c +++ src/allrepo.c @@ -51,13 +51,13 @@ /* ** COMMAND: all ** ** Usage: %fossil all (list|ls|pull|push|rebuild|sync) ** -** The ~/.fossil file records the location of all repositories for a -** user. This command performs certain operations on all repositories -** that can be useful before or after a period of disconnected operation. +** The ~/.fossil file records the location of all repositories for a user. +** This command performs certain operations on all repositories that can +** be useful before or after a period of disconnected operation. ** ** On Win32 systems, the file is named "_fossil" and is located in ** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%. ** ** Available operations are: @@ -71,12 +71,12 @@ ** rebuild Rebuild on all repositories ** ** sync Run a "sync" on all repositories ** ** Respositories are automatically added to the set of known repositories -** when one of the following commands against the repository: clone, info, -** pull, push, or sync +** when one of the following commands against the repository: +** clone, info, pull, push, or sync */ void all_cmd(void){ int n; Stmt q; const char *zCmd; Index: src/browse.c ================================================================== --- src/browse.c +++ src/browse.c @@ -247,7 +247,7 @@ @ } } db_finalize(&q); @ - style_footer(); + style_footer_cmdref("ls",0); } Index: src/checkin.c ================================================================== --- src/checkin.c +++ src/checkin.c @@ -101,11 +101,12 @@ ** COMMAND: changes ** ** Usage: %fossil changes ** ** Report on the edit status of all files in the current checkout. -** See also the "status" and "extra" commands. +** +** See also the status, extra and addremove commands. */ void changes_cmd(void){ Blob report; int vid; db_must_be_within_tree(); @@ -120,10 +121,12 @@ ** COMMAND: status ** ** Usage: %fossil status ** ** Report on the status of the current checkout. +** +** See also addremove */ void status_cmd(void){ int vid; db_must_be_within_tree(); /* 012345678901234 */ @@ -247,14 +250,16 @@ /* ** COMMAND: extras ** Usage: %fossil extras ?--dotfiles? ?--ignore GLOBPATTERN? ** ** Print a list of all files in the source tree that are not part of -** the current checkout. See also the "clean" command. +** the current checkout. See also the clean command. ** ** Files and subdirectories whose names begin with "." are normally ** ignored but can be included by adding the --dotfiles option. +** +** See also addremove */ void extra_cmd(void){ Blob path; Blob repo; Stmt q; @@ -293,19 +298,18 @@ ** COMMAND: clean ** Usage: %fossil clean ?--force? ?--dotfiles? ** ** Delete all "extra" files in the source tree. "Extra" files are ** files that are not officially part of the checkout. See also -** the "extra" command. This operation cannot be undone. -** -** You will be prompted before removing each file. If you are -** sure you wish to remove all "extra" files you can specify the -** optional --force flag and no prompts will be issued. -** -** Files and subdirectories whose names begin with "." are -** normally ignored. They are included if the "--dotfiles" option -** is used. +** the extras command. This operation cannot be undone. +** +** You will be prompted before removing each file. If you are sure +** you wish to remove all "extra" files you can specify the optional +** --force flag and no prompts will be issued. +** +** Files and subdirectories whose names begin with "." are normally +** ignored. They are included if the "--dotfiles" option is used. */ void clean_cmd(void){ int allFlag; int dotfilesFlag; Blob path, repo; @@ -557,27 +561,27 @@ ** ** Usage: %fossil commit ?OPTIONS? ?FILE...? ** ** Create a new version containing all of the changes in the current ** checkout. You will be prompted to enter a check-in comment unless -** the comment has been specified on the command-line using "-m". -** The editor defined in the "editor" fossil option (see %fossil help set) +** the comment has been specified on the command-line using "-m". The +** editor defined in the "editor" fossil option (see %fossil help set) ** will be used, or from the "VISUAL" or "EDITOR" environment variables ** (in that order) if no editor is set. ** ** You will be prompted for your GPG passphrase in order to sign the ** new manifest unless the "--nosign" option is used. All files that ** have changed will be committed unless some subset of files is ** specified on the command line. ** ** The --branch option followed by a branch name cases the new check-in -** to be placed in the named branch. The --bgcolor option can be followed +** to be placed in the named branch. The --bgcolor option can be followed ** by a color name (ex: '#ffc0c0') to specify the background color of ** entries in the new branch when shown in the web timeline interface. ** -** A check-in is not permitted to fork unless the --force or -f -** option appears. A check-in is not allowed against a closed check-in. +** A check-in is not permitted to fork unless the --force or -f option +** appears. A check-in is not allowed against a closed check-in. ** ** The --private option creates a private check-in that is never synced. ** Children of private check-ins are automatically private. ** ** Options: Index: src/checkout.c ================================================================== --- src/checkout.c +++ src/checkout.c @@ -172,11 +172,11 @@ ** files. ** ** The --latest flag can be used in place of VERSION to checkout the ** latest version in the repository. ** -** See also the "update" command. +** See also the update command. */ void checkout_cmd(void){ int forceFlag; /* Force checkout even if edits exist */ int keepFlag; /* Do not change any files on disk */ int latestFlag; /* Checkout the latest version */ @@ -272,11 +272,11 @@ /* ** COMMAND: close ** ** Usage: %fossil close ?-f|--force? ** -** The opposite of "open". Close the current database connection. +** The opposite of open. Close the current database connection. ** Require a -f or --force flag if there are unsaved changed in the ** current check-out. */ void close_cmd(void){ int forceFlag = find_option("force","f",0)!=0; Index: src/clone.c ================================================================== --- src/clone.c +++ src/clone.c @@ -26,21 +26,22 @@ /* ** COMMAND: clone ** ** Usage: %fossil clone ?OPTIONS? URL FILENAME ** -** Make a clone of a repository specified by URL in the local -** file named FILENAME. +** Make a clone of a repository specified by URL in the local file +** named FILENAME. ** ** By default, your current login name is used to create the default ** admin user. This can be overridden using the -A|--admin-user ** parameter. ** ** Options: ** ** --admin-user|-A USERNAME ** +** See also: push, pull, remote-url, sync */ void clone_cmd(void){ char *zPassword; const char *zDefaultUser; /* Optional name of the default user */ Index: src/configure.c ================================================================== --- src/configure.c +++ src/configure.c @@ -369,48 +369,53 @@ /* ** COMMAND: configuration ** ** Usage: %fossil configure METHOD ... ?-R|--repository REPOSITORY? ** -** Where METHOD is one of: export import merge pull push reset. All methods -** accept the -R or --repository option to specific a repository. +** Where METHOD is one of: export import merge pull push reset. All +** methods accept the -R or --repository option to specify a repository. ** ** %fossil configuration export AREA FILENAME ** -** Write to FILENAME exported configuraton information for AREA. -** AREA can be one of: all email project shun skin ticket user +** Write to FILENAME exported configuraton information for AREA. +** AREA can be one of: all email project shun skin ticket user ** ** %fossil configuration import FILENAME ** -** Read a configuration from FILENAME, overwriting the current -** configuration. +** Read a configuration from FILENAME, overwriting the current +** configuration. ** ** %fossil configuration merge FILENAME ** -** Read a configuration from FILENAME and merge its values into -** the current configuration. Existing values take priority over -** values read from FILENAME. +** Read a configuration from FILENAME and merge its values into +** the current configuration. Existing values take priority +** over values read from FILENAME. ** ** %fossil configuration pull AREA ?URL? ** -** Pull and install the configuration from a different server -** identified by URL. If no URL is specified, then the default -** server is used. +** Pull and install the configuration from a different server +** identified by URL. If no URL is specified, then the default +** server is used. ** ** %fossil configuration push AREA ?URL? ** -** Push the local configuration into the remote server identified -** by URL. Admin privilege is required on the remote server for -** this to work. +** Push the local configuration into the remote server identified +** by URL. Admin privilege is required on the remote server for +** this to work. ** ** %fossil configuration reset AREA ** -** Restore the configuration to the default. AREA as above. +** Restore the configuration to the default. AREA as above. +** +** WARNING: Do not import or merge or pull configurations from an +** untrusted source. The inbound configuration is not checked for +** safety and can introduce security vulnerabilities. ** -** WARNING: Do not import, merge, or pull configurations from an untrusted -** source. The inbound configuration is not checked for safety and can -** introduce security vulnerabilities. +** The different parts of this configuration can also be controlled +** using the gui: +** * Go to page Admin and use the subcommands +** */ void configuration_cmd(void){ int n; const char *zMethod; if( g.argc<3 ){ Index: src/db.c ================================================================== --- src/db.c +++ src/db.c @@ -1035,11 +1035,11 @@ ** COMMAND: new ** ** Usage: %fossil new ?OPTIONS? FILENAME ** ** Create a repository for a new project in the file named FILENAME. -** This command is distinct from "clone". The "clone" command makes +** This command is distinct from "clone". The clone command makes ** a copy of an existing project. This command starts a new project. ** ** By default, your current login name is used to create the default ** admin user. This can be overridden using the -A|--admin-user ** parameter. @@ -1420,11 +1420,11 @@ ** for the repository is created with its root at the working directory. ** If VERSION is specified then that version is checked out. Otherwise ** the latest version is checked out. No files other than "manifest" ** and "manifest.uuid" are modified if the --keep option is present. ** -** See also the "close" command. +** See also the close command. */ void cmd_open(void){ Blob path; int vid; int keepFlag; @@ -1536,77 +1536,82 @@ ** COMMAND: settings ** COMMAND: unset ** %fossil settings ?PROPERTY? ?VALUE? ?-global? ** %fossil unset PROPERTY ?-global? ** -** The "settings" command with no arguments lists all properties and their -** values. With just a property name it shows the value of that property. -** With a value argument it changes the property for the current repository. +** The "settings" command with no arguments lists all properties and +** their values. With just a property name it shows the value of that +** property. With a value argument it changes the property for the +** current repository. ** ** The "unset" command clears a property setting. ** ** -** auto-captcha If enabled, the Login page provides a button to -** fill in the captcha password. Default: on -** -** auto-shun If enabled, automatically pull the shunning list -** from a server to which the client autosyncs. -** -** autosync If enabled, automatically pull prior to commit -** or update and automatically push after commit or -** tag or branch creation. If the value is "pullonly" -** then only pull operations occur automatically. -** -** binary-glob The VALUE is a comma-separated list of GLOB patterns -** that should be treated as binary files for merging -** purposes. Example: *.xml -** -** clearsign When enabled, fossil will attempt to sign all commits -** with gpg. When disabled (the default), commits will -** be unsigned. -** -** diff-command External command to run when performing a diff. -** If undefined, the internal text diff will be used. -** -** dont-push Prevent this repository from pushing from client to -** server. Useful when setting up a private branch. -** -** editor Text editor command used for check-in comments. -** -** gdiff-command External command to run when performing a graphical -** diff. If undefined, text diff will be used. -** -** http-port The TCP/IP port number to use by the "server" -** and "ui" commands. Default: 8080 -** -** ignore-glob The VALUE is a comma-separated list of GLOB patterns -** specifying files that the "extra" command will ignore. -** Example: *.o,*.obj,*.exe -** -** localauth If enabled, require that HTTP connections from -** 127.0.0.1 be authenticated by password. If -** false, all HTTP requests from localhost have -** unrestricted access to the repository. -** -** mtime-changes Use file modification times (mtimes) to detect when -** files have been modified. (Default "on".) -** -** pgp-command Command used to clear-sign manifests at check-in. -** The default is "gpg --clearsign -o ". -** -** proxy URL of the HTTP proxy. If undefined or "off" then -** the "http_proxy" environment variable is consulted. -** If the http_proxy environment variable is undefined -** then a direct HTTP connection is used. -** -** ssh-command Command used to talk to a remote machine with -** the "ssh://" protocol. -** -** web-browser A shell command used to launch your preferred -** web browser when given a URL as an argument. -** Defaults to "start" on windows, "open" on Mac, -** and "firefox" on Unix. +** auto-captcha If enabled, the Login page provides a button to +** fill in the captcha password. Default: on +** +** auto-shun If enabled, automatically pull the shunning list +** from a server to which the client autosyncs. +** +** autosync If enabled, automatically pull prior to commit +** or update and automatically push after commit or +** tag or branch creation. If the value is "pullonly" +** then only pull operations occur automatically. +** +** binary-glob The VALUE is a comma-separated list of GLOB patterns +** that should be treated as binary files for merging +** purposes. Example: *.xml +** +** clearsign When enabled, fossil will attempt to sign all commits +** with gpg. When disabled (the default), commits will +** be unsigned. +** +** diff-command External command to run when performing a diff. +** If undefined, the internal text diff will be used. +** +** dont-push Prevent this repository from pushing from client to +** server. Useful when setting up a private branch. +** +** editor Text editor command used for check-in comments. +** +** gdiff-command External command to run when performing a graphical +** diff. If undefined, text diff will be used. +** +** http-port The TCP/IP port number to use by the "server" +** and "ui" commands. Default: 8080 +** +** ignore-glob The VALUE is a comma-separated list of GLOB patterns +** specifying files that the "extra" command will ignore. +** Example: *.o,*.obj,*.exe +** +** localauth If enabled, require that HTTP connections from +** 127.0.0.1 be authenticated by password. If +** false, all HTTP requests from localhost have +** unrestricted access to the repository. +** +** mtime-changes Use file modification times (mtimes) to detect when +** files have been modified. (Default "on".) +** +** pgp-command Command used to clear-sign manifests at check-in. +** The default is "gpg --clearsign -o ". +** +** proxy URL of the HTTP proxy. If undefined or "off" then +** the "http_proxy" environment variable is consulted. +** If the http_proxy environment variable is undefined +** then a direct HTTP connection is used. +** +** ssh-command Command used to talk to a remote machine with +** the "ssh://" protocol. +** +** web-browser A shell command used to launch your preferred +** web browser when given a URL as an argument. +** Defaults to "start" on windows, "open" on Mac, +** and "firefox" on Unix. +** +** There is a simple form in the administration gui for these settings: +** * Go to the Admin page +** ** and click Settings */ void setting_cmd(void){ int i; int globalFlag = find_option("global","g",0)!=0; int unsetFlag = g.argv[1][0]=='u'; Index: src/descendants.c ================================================================== --- src/descendants.c +++ src/descendants.c @@ -255,17 +255,20 @@ print_timeline(&q, 20); db_finalize(&q); } /* -** COMMAND: leaves +** COMMAND: leaves ** ** Usage: %fossil leaves ?--all? ?--closed? ** ** Find leaves of all branches. By default show only open leaves. ** The --all flag causes all leaves (closed and open) to be shown. ** The --closed flag shows only closed leaves. +** +** This information can also be viewed in the gui: +** * Go the leaves page */ void leaves_cmd(void){ Stmt q; int showAll = find_option("all", 0, 0)!=0; int showClosed = find_option("closed", 0, 0)!=0; @@ -292,11 +295,11 @@ @ [timeline] } } /* -** WEBPAGE: leaves +** WEBPAGE: leaves ** ** Find leaves of all branches. */ void leaves_page(void){ Stmt q; @@ -351,7 +354,7 @@ @ function xin(id){ @ } @ function xout(id){ @ } @ - style_footer(); + style_footer_cmdref("leaves",0); } Index: src/diff.c ================================================================== --- src/diff.c +++ src/diff.c @@ -810,20 +810,23 @@ for(i=0; i - style_footer(); + style_footer_cmdref("annotate",0); } /* ** COMMAND: annotate ** ** %fossil annotate FILENAME ** ** Output the text of a file with markings to show when each line of ** the file was last modified. +** +** This can also be viewed in the gui, if you click the "annotate" link +** on the "File History" page of files. */ void annotate_cmd(void){ int fnid; /* Filename ID */ int fid; /* File instance ID */ int mid; /* Manifest where file was checked in */ Index: src/diffcmd.c ================================================================== --- src/diffcmd.c +++ src/diffcmd.c @@ -417,17 +417,22 @@ ** the source check-in for the diff operation. If not specified, the ** source check-in is the base check-in for the current check-out. ** ** If the "--to VERSION" option appears, it specifies the check-in from ** which the second version of the file or files is taken. If there is -** no "--to" option then the (possibly edited) files in the current check-out -** are used. +** no "--to" option then the (possibly edited) files in the current +** check-out are used. ** ** The "-i" command-line option forces the use of the internal diff logic ** rather than any external diff program that might be configured using -** the "setting" command. If no external diff program is configured, then -** the "-i" option is a no-op. The "-i" option converts "gdiff" into "diff". +** the setting command. If no external diff program is configured, then +** the "-i" option is a no-op. The "-i" option converts "gdiff" into +** "diff". +** +** The results of the internal diff command can also be seen in the gui: +** 1. Go to the vdiff page +** 2. use the "diff against another version" link on the Check-in detail view. */ void diff_cmd(void){ int isGDiff; /* True for gdiff. False for normal diff */ int isInternDiff; /* True for internal diff */ int hasNFlag; /* True if -N or --new-file flag is used */ Index: src/event.c ================================================================== --- src/event.c +++ src/event.c @@ -440,7 +440,7 @@ @ @ @ @ @ - style_footer(); + style_footer_cmdref(0,"wiki format"); } Index: src/finfo.c ================================================================== --- src/finfo.c +++ src/finfo.c @@ -27,10 +27,13 @@ ** ** Print the change history for a single file. ** ** The "--limit N" and "--offset P" options limit the output to the first ** N changes after skipping P changes. +** +** The history of a file can also be viewed in the gui: +** * Go to the file browser and drill down to the file */ void finfo_cmd(void){ Stmt q; int vid; Blob dest; @@ -209,7 +212,7 @@ @ } } @ timeline_output_graph_javascript(pGraph); - style_footer(); + style_footer_cmdref("finfo",0); } Index: src/info.c ================================================================== --- src/info.c +++ src/info.c @@ -433,10 +433,12 @@ } @ | manifest if( g.okWrite ){ @ | edit } + @ | + @ diff against another version @ @ } @ }else{ @@ -475,11 +477,11 @@ const char *zOld = db_column_text(&q,1); const char *zNew = db_column_text(&q,2); append_file_change_line(zName, zOld, zNew, showDiff); } db_finalize(&q); - style_footer(); + style_footer_cmdref("info",0); } /* ** WEBPAGE: winfo ** URL: /winfo?name=RID @@ -558,11 +560,11 @@ wiki_convert(&wiki, 0, 0); blob_reset(&wiki); } manifest_clear(&m); } - style_footer(); + style_footer_cmdref("info",0); } /* ** Show a webpage error message */ @@ -634,21 +636,45 @@ ** ** Show all differences between two checkins. */ void vdiff_page(void){ int ridFrom, ridTo; - int showDetail = 0; + int showDetail = atoi(PD("detail","0")); + const char *zFrom = P("from"); + const char *zTo = P("to"); int iFrom, iTo; Manifest mFrom, mTo; login_check_credentials(); if( !g.okRead ){ login_needed(); return; } login_anonymous_available(); - if( vdiff_parse_manifest("from", &ridFrom, &mFrom) ) return; - if( vdiff_parse_manifest("to", &ridTo, &mTo) ) return; - showDetail = atoi(PD("detail","0")); + if( !zFrom || !zFrom[0] || !zTo || !zTo[0] ){ + /* if from or to or both are bissing, show a form to enter + ** the query parameters by hand + */ + style_header("Check-in Differences"); + @


+ @ Enter below the UUIDs, branch- or tag-names, you wish to diff: + @

+ @
+ @ + @ + @ + @
from:
to:
details:
+ @
+ @
+ style_footer_cmdref("diff",0); + return; + }else if( vdiff_parse_manifest("from", &ridFrom, &mFrom) + || vdiff_parse_manifest("to", &ridTo, &mTo) + ){ + return; + } style_header("Check-in Differences"); @

Difference From:

checkin_description(ridFrom); @

To:

checkin_description(ridTo); @@ -685,11 +711,11 @@ } } manifest_clear(&mFrom); manifest_clear(&mTo); - style_footer(); + style_footer_cmdref("diff",0); } /* ** Write a description of an object to the www reply. ** @@ -915,11 +941,11 @@ blob_reset(&c1); blob_reset(&c2); @ %h(blob_str(&diff)) @
blob_reset(&diff); - style_footer(); + style_footer_cmdref("diff",0); } /* ** WEBPAGE: raw ** URL: /raw?name=ARTIFACTID&m=TYPE @@ -1157,11 +1183,11 @@ hexdump(&content); @ } @ } - style_footer(); + style_footer_cmdref( "artifact",0 ); } /* ** WEBPAGE: tinfo ** URL: /tinfo?name=ARTIFACTID @@ -1217,11 +1243,11 @@ @ @
    free(zDate); ticket_output_change_artifact(&m); manifest_clear(&m); - style_footer(); + style_footer_cmdref("info",0); } /* ** WEBPAGE: info Index: src/main.c ================================================================== --- src/main.c +++ src/main.c @@ -576,11 +576,15 @@ /* ** COMMAND: help ** ** Usage: %fossil help COMMAND ** -** Display information on how to use COMMAND +** Display information on how to use COMMAND. If COMMAND is +** omitted, a list of available commands is displayed. +** +** This can also be viewed in the gui: +** * Go to the help page and click COMMAND */ void help_cmd(void){ int rc, idx; const char *z; if( g.argc!=3 ){ @@ -602,10 +606,20 @@ } while( *z ){ if( *z=='%' && strncmp(z, "%fossil", 7)==0 ){ printf("%s", g.argv[0]); z += 7; + }else if( *z=='<' && strncmp(z,"",3)==0 ){ + putchar('"'); + z += 3; + }else if( *z=='<' && strncmp(z,"",4)==0 ){ + putchar('"'); + z += 4; }else{ putchar(*z); z++; } } @@ -618,48 +632,125 @@ */ void help_page(void){ const char * zCmd = P("cmd"); style_header("Command line help %s%s",zCmd?" - ":"",zCmd?zCmd:""); - if( zCmd ){ + if( zCmd && zCmd[0] && strcmp(zCmd,"test") ){ int rc, idx; - char *z, *s, *d; - @

    %s(zCmd)

    rc = name_search(zCmd, aCommand, count(aCommand), &idx); if( rc==1 ){ - @ unknown command: %s(zCmd) + @

    unknown command: %s(zCmd)

    }else if( rc==2 ){ - @ ambiguous command prefix: %s(zCmd) + @

    ambiguous command prefix: %s(zCmd)

    }else{ - z = (char*)aCmdHelp[idx]; - if( z==0 ){ + char *zSrc, *zDest; + int src,dest,len; + + @

    %s(aCommand[idx].zName)

    + zSrc = (char*)aCmdHelp[idx]; + if( zSrc==0 || *zSrc==0 ){ @ no help available for the %s(aCommand[idx].zName) command }else{ - z=s=d=mprintf("%s",z); - while( *s ){ - if( *s=='%' && strncmp(s, "%fossil", 7)==0 ){ - s++; - }else{ - *d++ = *s++; - } - } - *d = 0; - @
    %s(z)
    - free(z); - } - } - @
    available commands in fossil + len = strlen(zSrc); + zDest = malloc(len+1); + for(src=dest=0;zSrc[src];){ + if( zSrc[src]=='%' && strncmp(zSrc+src, "%fossil", 7)==0 ){ + src++; /* skip % for fossil argv[0] expansion */ + }else if( zSrc[src]=='<' && strncmp(zSrc+src, "", 3)==0 ){ + src += 4; + zDest[dest++]='<'; + zDest[dest++]='/'; + zDest[dest++]='a'; + zDest[dest++]='>'; + zDest[dest++]='"'; + }else if( zSrc[src]=='<' && strncmp(zSrc+src, "", 3)==0 ){ + /* found an internal command cross reference, + ** create an additional link + */ + int start; + + len+=80; + zDest=realloc(zDest,len); + zDest[dest++]='"'; + zDest[dest++]=zSrc[src++]; /* < */ + zDest[dest++]=zSrc[src++]; /* a */ + zDest[dest++]=' '; + zDest[dest++]='h'; + zDest[dest++]='r'; + zDest[dest++]='e'; + zDest[dest++]='f'; + zDest[dest++]='='; + zDest[dest++]='"'; + zDest[dest++]='h'; + zDest[dest++]='e'; + zDest[dest++]='l'; + zDest[dest++]='p'; + zDest[dest++]='?'; + zDest[dest++]='c'; + zDest[dest++]='m'; + zDest[dest++]='d'; + zDest[dest++]='='; + start = src+1; + for( src=start; zSrc[src] && zSrc[src]!='<'; ){ + zDest[dest++]=zSrc[src++]; /* command name */ + } + zDest[dest++]='"'; + zDest[dest++]='>'; + for( src=start; zSrc[src] && zSrc[src]!='<'; ){ + zDest[dest++]=zSrc[src++]; /* command name */ + } + }else{ + zDest[dest++] = zSrc[src++]; + } + } + zDest[dest] = 0; + @
    %s(zDest)
    + free(zDest); + @
    additional information may be found in the web documentation: + @
    + @ cmd_%s(aCommand[idx].zName), + } + } + @ see also the list of + @ available commands in fossil @ version %s(MANIFEST_VERSION" "MANIFEST_DATE) UTC }else{ - int i; + int nCol, nRow, i, ignored, cnt, showTest; + /* detect, if we show normal or test commands */ + showTest = ( zCmd && !strncmp(zCmd,"test",4) ); + for( i=0,ignored=0; iAvailable commands - for(i=0; i - @ %s(aCommand[i].zName) + @
      + for( i=cnt=0; i
      + cnt=0; + } + if( (strncmp(aCommand[i].zName,"test",4)==0) ^ showTest ) continue; + @
    • + @ %s(aCommand[i].zName)
    • + cnt++; + } + @
    + if( showTest ){ + @ show standard commands + }else{ + @ } @
    fossil version %s(MANIFEST_VERSION" "MANIFEST_DATE) UTC } style_footer(); } @@ -869,10 +960,12 @@ ** repository: /home/somebody/project.db ** ** The second line defines the name of the repository. After locating ** the repository, fossil will generate a webpage on stdout based on ** the values of standard CGI environment variables. +** +** See also the http, server and ui commands. */ void cmd_cgi(void){ const char *zFile; const char *zNotFound = 0; Blob config, line, key, value; @@ -982,10 +1075,12 @@ ** If REPOSITORY is a directory that contains one or more respositories ** with names of the form "*.fossil" then the first element of the URL ** pathname selects among the various repositories. If the pathname does ** not select a valid repository and the --notfound option is available, ** then the server redirects (HTTP code 302) to the URL of --notfound. +** +** See also the cgi, server and ui commands. */ void cmd_http(void){ const char *zIpAddr; const char *zNotFound; zNotFound = find_option("notfound", 0, 1); @@ -1070,10 +1165,12 @@ ** ** In the "server" command, the REPOSITORY can be a directory (aka folder) ** that contains one or more respositories with names ending in ".fossil". ** In that case, the first element of the URL is used to select among the ** various repositories. +** +** See also the cgi and http commands. */ void cmd_webserver(void){ int iPort, mxPort; /* Range of TCP ports allowed */ const char *zPort; /* Value of the --port option */ char *zBrowser; /* Name of web browser program */ Index: src/merge.c ================================================================== --- src/merge.c +++ src/merge.c @@ -40,15 +40,15 @@ ** file and directory names from the current checkout even if those ** names might have been changed in the branch being merged in. ** ** Other options: ** -** --detail Show additional details of the merge +** --detail Show additional details of the merge ** -** --binary GLOBPATTERN Treat files that match GLOBPATTERN as binary -** and do not try to merge parallel changes. This -** option overrides the "binary-glob" setting. +** --binary GLOBPATTERN Treat files that match GLOBPATTERN as binary +** and do not try to merge parallel changes. This +** option overrides the "binary-glob" setting. */ void merge_cmd(void){ int vid; /* Current version */ int mid; /* Version we are merging against */ int pid; /* The pivot version - most recent common ancestor */ Index: src/rebuild.c ================================================================== --- src/rebuild.c +++ src/rebuild.c @@ -379,13 +379,13 @@ ** %fossil scrub [--verily] [--force] [REPOSITORY] ** ** The command removes sensitive information (such as passwords) from a ** repository so that the respository can be sent to an untrusted reader. ** -** By default, only passwords are removed. However, if the --verily option -** is added, then private branches, concealed email addresses, IP -** addresses of correspondents, and similar privacy-sensitive fields +** By default, only passwords are removed. However, if the --verily +** option is added, then private branches, concealed email addresses, +** IP addresses of correspondents, and similar privacy-sensitive fields ** are also purged. ** ** This command permanently deletes the scrubbed information. The effects ** of this command are irreversible. Use with caution. ** @@ -485,10 +485,11 @@ ** This command studies the artifacts (files) in DIRECTORY and ** reconstructs the fossil record from them. It places the new ** fossil repository in FILENAME. Subdirectories are read, files ** with leading '.' in the filename are ignored. ** +** See also the deconstruct command. */ void reconstruct_cmd(void) { char *zPassword; if( g.argc!=4 ){ usage("FILENAME DIRECTORY"); @@ -523,18 +524,22 @@ } /* ** COMMAND: deconstruct ** -** Usage %fossil deconstruct ?-R|--repository REPOSITORY? ?-L|--prefixlength N? DESTINATION +** Usage: %fossil deconstruct ?-R|--repository REPOSITORY? \\ +** ?-L|--prefixlength N? DESTINATION ** -** This command exports all artifacts of o given repository and -** writes all artifacts to the file system. The DESTINATION directory -** will be populated with subdirectories AA and files AA/BBBBBBBBB.., where -** AABBBBBBBBB.. is the 40 character artifact ID, AA the first 2 characters. +** This command exports all artifacts of o given repository and writes +** all artifacts to the file system. The DESTINATION directory will be +** populated with subdirectories AA and files AA/BBBBBBBBB.., where +** AABBBBBBBBB.. is the 40 character artifact ID and AA the first 2 +** characters. ** If -L|--prefixlength is given, the length (default 2) of the directory ** prefix can be set to 0,1,..,9 characters. +** +** See also the reconstruct command. */ void deconstruct_cmd(void){ const char *zDestDir; const char *zPrefixOpt; Stmt s; Index: src/report.c ================================================================== --- src/report.c +++ src/report.c @@ -80,11 +80,11 @@ Th_Render(zScript); blob_reset(&ril); if( g.thTrace ) Th_Trace("END_REPORTLIST
    \n", -1); - style_footer(); + style_footer_cmdref("ticket",0); } /* ** Remove whitespace from both ends of a string. */ Index: src/setup.c ================================================================== --- src/setup.c +++ src/setup.c @@ -217,11 +217,11 @@ @ nobody. @

    @ @
@ - style_footer(); + style_footer_cmdref("user",0); } /* ** Return true if zPw is a valid password string. A valid ** password string is: @@ -664,11 +664,11 @@ @ template for users who are allowed more access than @ anonymous, @ but less than a developer. @

@ - style_footer(); + style_footer_cmdref("user",0); } /* ** Generate a checkbox for an attribute. @@ -1004,11 +1004,11 @@ @ See also the header and @ footer editing screens. @
   cgi_append_default_css();
   @ 
- style_footer(); + style_footer_cmdref("configuration","area skin"); db_end_transaction(0); } /* ** WEBPAGE: setup_header @@ -1042,11 +1042,11 @@ @ See also the CSS and @ footer editing screeens. @
   @ %h(zDefaultHeader)
   @ 
- style_footer(); + style_footer_cmdref("configuration","area skin"); db_end_transaction(0); } /* ** WEBPAGE: setup_footer @@ -1079,11 +1079,11 @@ @ See also the CSS and @ header editing screens. @
   @ %h(zDefaultFooter)
   @ 
- style_footer(); + style_footer_cmdref("configuration","area skin"); db_end_transaction(0); } /* ** WEBPAGE: setup_logo @@ -1148,8 +1148,8 @@ @ @

Note: Your browser has probably cached the @ logo image, so you will probably need to press the Reload button on your @ browser after changing the logo to provoke your browser to reload the new @ logo image.

- style_footer(); + style_footer_cmdref("configuration","area skin"); db_end_transaction(0); } Index: src/skins.c ================================================================== --- src/skins.c +++ src/skins.c @@ -840,8 +840,8 @@ @ } } db_finalize(&q); @ - style_footer(); + style_footer_cmdref("configuration","area skin"); db_end_transaction(0); } Index: src/style.c ================================================================== --- src/style.c +++ src/style.c @@ -114,10 +114,27 @@ cgi_destination(CGI_BODY); g.cgiOutput = 1; headerHasBeenGenerated = 1; sideboxUsed = 0; } + +/* +** append a reference to command line to a web page +** and generate the footer +*/ +void style_footer_cmdref( const char * const zCmd, const char * const zAddOn ){ + @
+ if( zCmd ){ + @ See also command line help: + @ %s(zCmd) + } + if( zAddOn ){ + @ %s(zAddOn) + } + @
+ style_footer(); +} /* ** Draw the footer at the bottom of the page. */ void style_footer(void){ @@ -239,10 +256,11 @@ @ if {[info exists login]} { @ html "Logout " @ } else { @ html "Login " @ } +@ html "?" @ ; /* ** The default page footer @@ -730,10 +748,30 @@ }, { "p.shunned", "format for artifact lines beeing shunned", @ color: blue; }, + { "a.hidden", + "format for links, that should not be very visible", + @ font-size: xx-small; + @ color: #aaaaaa; + }, + { "div.cmdhelp", + "format for single command display on the gui help page", + @ font-family: monospace; + @ padding-left: 4em; + @ padding-bottom: 1em; + @ white-space: pre; + }, + { "div.cmdref", + "format for references to command line help entries the actual gui page." + "set \"display\" to \"none\" to suppress the display", + @ font-size: small; + @ text-align: right; + @ font-family: monospace; + @ color: #777777; + }, { 0, 0, 0 } }; @@ -745,18 +783,18 @@ int i; for (i=0;cssDefaultList[i].elementClass;i++){ if (cssDefaultList[i].elementClass[0]){ cgi_printf("/* %s */\n%s {\n%s\n}\n\n", - cssDefaultList[i].comment, - cssDefaultList[i].elementClass, - cssDefaultList[i].value - ); + cssDefaultList[i].comment, + cssDefaultList[i].elementClass, + cssDefaultList[i].value + ); }else{ cgi_printf("%s", - cssDefaultList[i].value - ); + cssDefaultList[i].value + ); } } } /* Index: src/sync.c ================================================================== --- src/sync.c +++ src/sync.c @@ -132,18 +132,19 @@ ** Pull changes from a remote repository into the local repository. ** Use the "-R REPO" or "--repository REPO" command-line options ** to specify an alternative repository file. ** ** If the URL is not specified, then the URL from the most recent -** clone, push, pull, remote-url, or sync command is used. +** clone, push, pull, remote-url, or sync command +** is used. ** ** The URL specified normally becomes the new "remote-url" used for ** subsequent push, pull, and sync operations. However, the "--once" ** command-line option makes the URL a one-time-use URL that is not ** saved. ** -** See also: clone, push, sync, remote-url +** See also: clone, push, sync, remote-url */ void pull_cmd(void){ int syncFlags = process_sync_args(); client_sync(0,1,0,syncFlags,0); } @@ -156,18 +157,19 @@ ** Push changes in the local repository over into a remote repository. ** Use the "-R REPO" or "--repository REPO" command-line options ** to specify an alternative repository file. ** ** If the URL is not specified, then the URL from the most recent -** clone, push, pull, remote-url, or sync command is used. +** clone, push, pull, remote-url, or sync command +** is used. ** ** The URL specified normally becomes the new "remote-url" used for -** subsequent push, pull, and sync operations. However, the "--once" -** command-line option makes the URL a one-time-use URL that is not -** saved. +** subsequent push, pull, and sync operations. However, +** the "--once" command-line option makes the URL a one-time-use URL +** that is not saved. ** -** See also: clone, pull, sync, remote-url +** See also: clone, pull, sync, remote-url */ void push_cmd(void){ process_sync_args(); client_sync(1,0,0,0,0); } @@ -177,27 +179,28 @@ ** COMMAND: sync ** ** Usage: %fossil sync ?URL? ?options? ** ** Synchronize the local repository with a remote repository. This is -** the equivalent of running both "push" and "pull" at the same time. -** Use the "-R REPO" or "--repository REPO" command-line options +** the equivalent of running both push and pull at the same +** time. Use the "-R REPO" or "--repository REPO" command-line options ** to specify an alternative repository file. ** ** If a user-id and password are required, specify them as follows: ** ** http://userid:password@www.domain.com:1234/path ** -** If the URL is not specified, then the URL from the most recent successful -** clone, push, pull, remote-url, or sync command is used. +** If the URL is not specified, then the URL from the most recent +** successful clone, push, pull, remote-url, or sync +** command is used. ** ** The URL specified normally becomes the new "remote-url" used for -** subsequent push, pull, and sync operations. However, the "--once" -** command-line option makes the URL a one-time-use URL that is not -** saved. +** subsequent push, pull, and sync operations. However, +** the "--once" command-line option makes the URL a one-time-use URL +** that is not saved. ** -** See also: clone, push, pull, remote-url +** See also: clone, push, pull, remote-url */ void sync_cmd(void){ int syncFlags = process_sync_args(); client_sync(1,1,0,syncFlags,0); } @@ -205,19 +208,19 @@ /* ** COMMAND: remote-url ** ** Usage: %fossil remote-url ?URL|off? ** -** Query and/or change the default server URL used by the "pull", "push", -** and "sync" commands. -** -** The remote-url is set automatically by a "clone" command or by any -** "sync", "push", or "pull" command that specifies an explicit URL. -** The default remote-url is used by auto-syncing and by "sync", "push", -** "pull" that omit the server URL. -** -** See also: clone, push, pull, sync +** Query and/or change the default server URL used by the pull, +** push, and sync commands. +** +** The remote-url is set automatically by a clone command or by any +** sync, push, or pull command that specifies an explicit +** URL. The default remote-url is used by auto-syncing and by +** sync, push, pull that omit the server URL. +** +** See also: clone, push, pull, sync */ void remote_url_cmd(void){ char *zUrl; db_find_and_open_repository(1); if( g.argc!=2 && g.argc!=3 ){ Index: src/tag.c ================================================================== --- src/tag.c +++ src/tag.c @@ -318,11 +318,11 @@ ** ** %fossil tag add ?--raw? ?--propagate? TAGNAME CHECK-IN ?VALUE? ** ** Add a new tag or property to CHECK-IN. The tag will ** be usable instead of a CHECK-IN in commands such as -** update and merge. If the --propagate flag is present, +** update and merge. If the --propagate flag is present, ** the tag value propages to all descendants of CHECK-IN ** ** %fossil tag cancel ?--raw? TAGNAME CHECK-IN ** ** Remove the tag TAGNAME from CHECK-IN, and also remove @@ -345,16 +345,16 @@ ** ** If you need to use a tagname that might be confused with ** a hexadecimal baseline or artifact ID, you can explicitly ** disambiguate it by prefixing it with "tag:". For instance: ** -** fossil update decaf +** fossil update decaf ** ** will be taken as an artifact or baseline ID and fossil will ** probably complain that no such revision was found. However ** -** fossil update tag:decaf +** fossil update tag:decaf ** ** will assume that "decaf" is a tag/branch name. ** ** only allow --date-override and --user-override in ** %fossil tag add --date-override 'YYYY-MMM-DD HH:MM:SS' \\ @@ -531,11 +531,11 @@ @
  • %h(zName)
  • } } @ db_finalize(&q); - style_footer(); + style_footer_cmdref("tag","list"); } /* ** Draw the names of all tags added to check-in rid. Only tags ** that are directly applied to rid are named. Propagated tags Index: src/timeline.c ================================================================== --- src/timeline.c +++ src/timeline.c @@ -952,11 +952,11 @@ db_prepare(&q, "SELECT * FROM timeline ORDER BY timestamp DESC /*scan*/"); @

    %b(&desc)

    blob_reset(&desc); www_print_timeline(&q, tmFlags, 0); db_finalize(&q); - style_footer(); + style_footer_cmdref("timeline",0); } /* ** The input query q selects various records. Print a human-readable ** summary of those records. @@ -1091,10 +1091,18 @@ ** page. For example: ** ** w = wiki commits only ** ci = file commits only ** t = tickets only +** e = events only +** +** The information can also be used in the gui: +** * go to the timeline page +** * or the "history" links on the dedicated details views(events, +** files, tickets, ..) +** +** See also: descendants */ void timeline_cmd(void){ Stmt q; int n, k; const char *zCount; Index: src/tkt.c ================================================================== --- src/tkt.c +++ src/tkt.c @@ -363,11 +363,11 @@ @ } db_finalize(&q); } - style_footer(); + style_footer_cmdref("info",0); } /* ** TH command: append_field FIELD STRING ** @@ -532,11 +532,11 @@ cgi_redirect(mprintf("%s/tktview/%s", g.zBaseURL, zNewUuid)); return; } @ if( g.thTrace ) Th_Trace("END_TKTVIEW
    \n", -1); - style_footer(); + style_footer_cmdref("ticket","add"); } /* ** WEBPAGE: tktedit ** WEBPAGE: debug_tktedit @@ -599,11 +599,11 @@ cgi_redirect(mprintf("%s/tktview/%s", g.zBaseURL, zName)); return; } @ if( g.thTrace ) Th_Trace("BEGIN_TKTEDIT
    \n", -1); - style_footer(); + style_footer_cmdref("ticket","change"); } /* ** Check the ticket table schema in zSchema to see if it appears to ** be well-formed. If everything is OK, return NULL. If something is @@ -705,11 +705,11 @@ } db_prepare(&q, zSQL); free(zSQL); www_print_timeline(&q, TIMELINE_ARTID, 0); db_finalize(&q); - style_footer(); + style_footer_cmdref("timeline",0); } /* ** WEBPAGE: tkthistory ** URL: /tkthistory?name=TICKETUUID @@ -792,11 +792,11 @@ } manifest_clear(&m); } } db_finalize(&q); - style_footer(); + style_footer_cmdref("timeline",0); } /* ** Return TRUE if the given BLOB contains a newline character. */ @@ -896,10 +896,13 @@ ** ** like set, but create a new ticket with the given values. ** ** The values in set|add are not validated against the definitions ** given in "Ticket Common Script". +** +** All this stuff can also be done in the gui: +** * Go the the Tickets page */ void ticket_cmd(void){ int n; /* do some ints, we want to be inside a checkout */ Index: src/undo.c ================================================================== --- src/undo.c +++ src/undo.c @@ -244,16 +244,17 @@ /* ** COMMAND: undo ** ** Usage: %fossil undo ?FILENAME...? ** -** Undo the most recent update or merge or revert operation. If FILENAME is -** specified then restore the content of the named file(s) but otherwise -** leave the update or merge or revert in effect. +** Undo the most recent update or merge or revert operation. +** If FILENAME is specified then restore the content of the named +** file(s) but otherwise leave the update, merge or revert +** in effect. ** -** A single level of undo/redo is supported. The undo/redo stack -** is cleared by the commit and checkout commands. +** A single level of undo/redo is supported. The undo/redo +** stack is cleared by the commit and checkout commands. */ void undo_cmd(void){ int undo_available; db_must_be_within_tree(); db_begin_transaction(); @@ -283,17 +284,17 @@ /* ** COMMAND: redo ** ** Usage: %fossil redo ?FILENAME...? ** -** Redo an update or merge or revert operation that has been undone -** by the undo command. If FILENAME is specified then restore the changes -** associated with the named file(s) but otherwise leave the update -** or merge undone. +** Redo an update, merge or revert operation that has been +** undone by the undo command. If FILENAME is specified then restore +** the changes associated with the named file(s) but otherwise leave the +** update or merge undone. ** -** A single level of undo/redo is supported. The undo/redo stack -** is cleared by the commit and checkout commands. +** A single level of undo/redo is supported. The undo/redo +** stack is cleared by the commit and checkout commands. */ void redo_cmd(void){ int undo_available; db_must_be_within_tree(); db_begin_transaction(); Index: src/update.c ================================================================== --- src/update.c +++ src/update.c @@ -348,11 +348,11 @@ ** appears. ** ** Revert all files if no file name is provided. ** ** If a file is reverted accidently, it can be restored using -** the "fossil undo" command. +** the undo command. */ void revert_cmd(void){ const char *zFile; const char *zRevision; Blob record; Index: src/user.c ================================================================== --- src/user.c +++ src/user.c @@ -171,10 +171,16 @@ ** to exist in the database. ** ** %fossil user password USERNAME ?PASSWORD? ** ** Change the web access password for a user. +** Users can change their own password on the +** Login/Logout gui page. +** +** Administrators can also use the gui: +** * Go to page Admin +** ** and click Users */ void user_cmd(void){ int n; db_find_and_open_repository(1); if( g.argc<3 ){ Index: src/wiki.c ================================================================== --- src/wiki.c +++ src/wiki.c @@ -164,11 +164,11 @@ @
  • @ Search wiki titles: @  
    @
  • @ - style_footer(); + style_footer_cmdref("wiki",0); return; } if( check_name(zPageName) ) return; isSandbox = is_sandbox(zPageName); if( isSandbox ){ @@ -252,10 +252,14 @@ db_finalize(&q); if( !isSandbox ){ manifest_clear(&m); } + /* don'tshow the help cross reference, because we are rendering + ** the wiki conten! + ** style_footer_cmdref("wiki","export"); + */ style_footer(); } /* ** WEBPAGE: wikiedit @@ -380,11 +384,11 @@ @ @ if( !isSandbox ){ manifest_clear(&m); } - style_footer(); + style_footer_cmdref("wiki"," / wiki format"); } /* ** WEBPAGE: wikinew ** URL /wikinew @@ -413,11 +417,11 @@ @

    if( zName[0] ){ @

    @ "%h(zName)" is not a valid wiki page name!

    } - style_footer(); + style_footer_cmdref("wiki","create"); } /* ** Append the wiki text for an remark to the end of the given BLOB. @@ -599,11 +603,11 @@ db_prepare(&q, zSQL); free(zSQL); zWikiPageName = zPageName; www_print_timeline(&q, TIMELINE_ARTID, wiki_history_extra); db_finalize(&q); - style_footer(); + style_footer_cmdref("timeline",0); } /* ** WEBPAGE: wdiff ** URL: /whistory?name=PAGENAME&a=RID1&b=RID2 @@ -693,11 +697,11 @@ @
  • %h(zName)
  • } } db_finalize(&q); @ - style_footer(); + style_footer_cmdref("wiki","list"); } /* ** WEBPAGE: wfind ** @@ -899,10 +903,13 @@ ** ** %fossil wiki diff ?ARTIFACT? ?-f infile[=stdin]? EntryName ** ** Diffs the local copy of a page with a given version (defaulting ** to the head version). +** +** The wiki format is explained on the Wiki subpage +** Formatting rules. */ void wiki_cmd(void){ int n; db_find_and_open_repository(1); if( g.argc<3 ){ Index: src/winhttp.c ================================================================== --- src/winhttp.c +++ src/winhttp.c @@ -89,10 +89,13 @@ if( z ){ wanted = find_content_length(zHdr) + (&z[4]-zHdr) - amt; break; } } + if( g.fHttpTrace ){ + fprintf(stderr,"HTTPTRACE(%p): got header '%s'\n",pAppData,zHdr); + } if( amt>=sizeof(zHdr) ) goto end_request; out = fopen(zRequestFName, "wb"); if( out==0 ) goto end_request; fwrite(zHdr, 1, amt, out); while( wanted>0 ){ @@ -109,16 +112,26 @@ out = 0; sprintf(zCmd, "\"%s\" http \"%s\" %s %s %s%s", _pgmptr, g.zRepositoryName, zRequestFName, zReplyFName, inet_ntoa(p->addr.sin_addr), p->zNotFound ); + if( g.fHttpTrace ){ + fprintf(stderr,"HTTPTRACE(%p): calling '%s'\n",pAppData,zCmd); + } portable_system(zCmd); in = fopen(zReplyFName, "rb"); if( in ){ + if( g.fHttpTrace ){ + fprintf(stderr,"HTTPTRACE(%p): read reply '%s'\n",pAppData,zReplyFName); + } while( (got = fread(zHdr, 1, sizeof(zHdr), in))>0 ){ send(p->s, zHdr, got, 0); } + }else{ + if( g.fHttpTrace ){ + fprintf(stderr,"HTTPTRACE(%p): no reply '%s'\n",pAppData,zReplyFName); + } } end_request: if( out ) fclose(out); if( in ) fclose(in); @@ -212,12 +225,15 @@ p = fossil_malloc( sizeof(*p) ); p->id = ++idCnt; p->s = client; p->addr = client_addr; p->zNotFound = zNotFoundOption; + if( g.fHttpTrace ){ + fprintf(stderr,"HTTPTRACE(%p): start new request thread\n",p); + } _beginthread(win32_process_one_http_request, 0, (void*)p); } closesocket(s); WSACleanup(); } #endif /* _WIN32 -- This code is for win32 only */ Index: src/zip.c ================================================================== --- src/zip.c +++ src/zip.c @@ -376,15 +376,18 @@ /* ** COMMAND: zip ** ** Usage: %fossil zip VERSION OUTPUTFILE [--name DIRECTORYNAME] ** -** Generate a ZIP archive for a specified version. If the --name option is -** used, it argument becomes the name of the top-level directory in the +** Generate a ZIP archive for a specified version. If the --name option +** is used, it argument becomes the name of the top-level directory in the ** resulting ZIP archive. If --name is omitted, the top-level directory ** named is derived from the project name, the check-in date and time, and ** the artifact ID of the check-in. +** +** The zip download can also be done through the Check-in detail view, +** accessible from the timeline page. */ void baseline_zip_cmd(void){ int rid; Blob zip; const char *zName; Index: win/Makefile.PellesCGMake ================================================================== --- win/Makefile.PellesCGMake +++ win/Makefile.PellesCGMake @@ -57,12 +57,13 @@ LINKFLAGS=-subsystem:console -machine:$(TARGETMACHINE_LN) /LIBPATH:$(PellesCDir)\lib\win$(TARGETEXTEND) /LIBPATH:$(PellesCDir)\lib kernel32.lib advapi32.lib delayimp$(TARGETEXTEND).lib Wsock32.lib Crtmt$(TARGETEXTEND).lib # define standard C-compiler and flags, used to compile # the fossil binary. Some special definitions follow for # special files follow +# Pelles C doesn't support _pgmptr in it's includes/libs, so map it to argv[0] CC=$(PellesCDir)\bin\pocc.exe -DEFINES=-DFOSSIL_I18N=0 -Dstrncasecmp=memicmp -Dstrcasecmp=stricmp +DEFINES=-DFOSSIL_I18N=0 -Dstrncasecmp=memicmp -Dstrcasecmp=stricmp -D_pgmptr=g.argv[0] CCFLAGS=-T$(TARGETMACHINE_CC)-coff -Ot -W2 -Gd -Go -Ze -MT $(DEFINES) INCLUDE=/I $(PellesCDir)\Include\Win /I $(PellesCDir)\Include /I $(ZLIBSRCDIR) /I $(SRCDIR) # define commands for building the windows resource files RESOURCE=fossil.res Index: www/index.wiki ================================================================== --- www/index.wiki +++ www/index.wiki @@ -123,11 +123,12 @@ * [./stats.wiki | Performance statistics] taken from real-world projects hosted on fossil. * How to [./shunning.wiki | delete content] from a fossil repository. * How Fossil does [./password.wiki | password management]. * Some (unfinished but expanding) extended - [./reference.wiki | reference documentation] for the fossil command line. + [./reference.wiki | reference documentation] for the fossil + [/help|command line]. * Documentation on the [http://www.sqliteconcepts.org/THManual.pdf | TH1 Script Language] used to configure the ticketing subsystem. * A free hosting server for Fossil repositories is available at [http://chiselapp.com/]. Index: www/reference.wiki ================================================================== --- www/reference.wiki +++ www/reference.wiki @@ -50,653 +50,65 @@


    You should probably start interacting with fossil at the command line by asking it what it can do:    ˆ - $ fossil help
    +  $ fossil [/help|help]
    +
    +  This will generate output in the form:
     Usage: fossil help COMMAND.
     Available COMMANDs:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add*co*httprebuildsync*
    all*commitinforeconstructtag
    branchconfigurationleavesredotimeline
    cgi*deconstructls*rename*ui
    changes*del*mergerevertundo
    checkout*descendantsmv*rm*unset
    cidiffnew*rstatsupdate*
    cleanextra*openserveruser
    clonegdiffpullsettingsversion*
    closehelppushstatus*wiki
    +    [/help?cmd=add|add]
    +    [/help?cmd=co|co]
    +    [/help?cmd=info|info]
    +    [/help?cmd=remote-url|remote-url]
    +    [/help?cmd=ticket|ticket]
    +  
    +  
    +    ..
    +     
    +     
    +     
    +     
    +  
    +
     This is fossil version [a89b436bc9] 2009-02-11 05:00:02 UTC
     
    -What follows is a survey of what you get if you type -fossil help command for all of the -commands listed above. There are links to individual pages for each -of them; pages with content (commands marked with a '*' are done) go -into the reason for a command in a bit more depth than the program help. -
    -
    ˆ - Usage: fossil add FILE... - Make arrangements to add one or more files to the current checkout - at the next commit. - -
    ˆ - Usage: fossil all (list|pull|push|rebuild|sync) - The ~/.fossil file records the location of all repositories for a - user. This command performs certain operations on all repositories - that can be useful before or after a period of disconnection operation. - - On Win32 systems, this file is located in %LOCALAPPDATA%, %APDDATA% - or %HOMEPATH% and is named _fossil. - - Available operations are: - - list Display the location of all repositories - - pull Run a "pull" operation on all repositories - - push Run a "push" on all repositories - - rebuild Rebuild on all repositories - - sync Run a "sync" on all repositories - - Respositories are automatically added to the set of known repositories - when one of the following commands against the repository: clone, info, - pull, push, or sync - -
    ˆ - Usage: fossil branch SUBCOMMAND ... ?-R|--repository FILE? - -Run various subcommands on the branches of the open repository or -of the repository identified by the -R or --repository option. - - fossil branch new BRANCH-NAME BASIS ?-bgcolor COLOR? - - Create a new branch BRANCH-NAME off of check-in BASIS. - You can optionally give the branch a default color. - - fossil branch list - - List all branches - -
    ˆ - Usage: fossil cgi SCRIPT - The SCRIPT argument is the name of a file that is the CGI script - that is being run. The command name, "cgi", may be omitted if - the GATEWAY_INTERFACE environment variable is set to "CGI" (which - should always be the case for CGI scripts run by a webserver.) The - SCRIPT file should look something like this: - - #!/usr/bin/fossil - repository: /home/somebody/project.db - - The second line defines the name of the repository. After locating - the repository, fossil will generate a webpage on stdout based on - the values of standard CGI environment variables. - -
    ˆ - Usage: fossil changes - Report on the edit status of all files in the current checkout. - See also the "status" and "extra" commands. - -
    ˆ - Usage: fossil checkout VERSION ?-f|--force? - Check out a version specified on the command-line. This command - will not overwrite edited files in the current checkout unless - the --force option appears on the command-line. - - See also the "update" command. - -
    ˆ - Usage: fossil commit ?-m COMMENT? ?--nosign? ?FILE...? fossil ci ... (as above) - - Create a new version containing all of the changes in the current - checkout. You will be prompted to enter a check-in comment unless - the "-m" option is used to specify a comment line. You will be - prompted for your GPG passphrase in order to sign the new manifest - unless the "--nosign" option is used. All files that have - changed will be committed unless some subset of files is specified - on the command line. - -
    ˆ - Usage: fossil clean ?-all? - Delete all "extra" files in the source tree. "Extra" files are - files that are not officially part of the checkout. See also - the "extra" command. This operation cannot be undone. - - You will be prompted before removing each file. If you are - sure you wish to remove all "extra" files you can specify the - optional -all flag. - -
    ˆ - Usage: fossil clone URL FILENAME - Make a clone of a repository specified by URL in the local - file named FILENAME. - -
    ˆ - Usage: fossil close ?-f|--force? - The opposite of "open". Close the current database connection. - Require a -f or --force flag if there are unsaved changed in the - current check-out. - -
    ˆ - Usage: fossil configuration METHOD ... - Where METHOD is one of: export import merge pull push reset. All methods - accept the -R or --repository option to specific a repository. - - fossil configuration export AREA FILENAME - - Write to FILENAME exported configuraton information for AREA. - AREA can be one of: all ticket skin project - - fossil configuration import FILENAME - - Read a configuration from FILENAME, overwriting the current - configuration. - - fossil configuration merge FILENAME - - Read a configuration from FILENAME and merge its values into - the current configuration. Existing values take priority over - values read from FILENAME. - - fossil configuration pull AREA ?URL? - - Pull and install the configuration from a different server - identified by URL. If no URL is specified, then the default - server is used. - fossil configuration push AREA ?URL? - - Push the local configuration into the remote server identified - by URL. Admin privilege is required on the remote server for - this to work. - - fossil configuration reset AREA - - Restore the configuration to the default. AREA as above. - - WARNING: Do not import, merge, or pull configurations from an untrusted - source. The inbound configuration is not checked for safety and can - introduce security vulnerabilities. - -
    ˆ - COMMAND: deconstruct - Usage: fossil deconstruct ?-R|--repository REPOSITORY? DESTINATION - Populates the indicated DESTINATION directory with copies of all - artifcats contained within the repository. Artifacts are named AA/bbbbb - where AA is the first 2 characters of the artifact ID and bbbbb is the - remaining 38 characters. - -
    ˆ - Usage: fossil rm FILE... or: fossil del FILE... - Remove one or more files from the tree. - -
    ˆ - Usage: fossil descendants ?CHECKIN-ID? - Find all leaf descendants of the check-in specified or if the argument - is omitted, of the check-in currently checked out. - -
    ˆ - Usage: fossil diff|gdiff ?-i? ?-r REVISION? FILE... - Show the difference between the current version of a file (as it - exists on disk) and that same file as it was checked out. - - diff will show a textual diff while gdiff will attempt to run a - graphical diff command that you have setup. If the choosen command - is not yet configured, the internal textual diff command will be - used. - - If -i is supplied for either diff or gdiff, the internal textual - diff command will be executed. - - Here are a few external diff command settings, for example: - - fossil setting diff-command diff - - fossil setting gdiff-command tkdiff - fossil setting gdiff-command eskill22 - fossil setting gdiff-command tortoisemerge - fossil setting gdiff-command meld - fossil setting gdiff-command xxdiff - fossil setting gdiff-command kdiff3 - -
    ˆ - Usage: fossil extra - Print a list of all files in the source tree that are not part of - the current checkout. See also the "clean" command. - -
    ˆ - Usage: fossil help COMMAND - Display information on how to use COMMAND - -
    ˆ - Usage: fossil http REPOSITORY - Handle a single HTTP request appearing on stdin. The resulting webpage - is delivered on stdout. This method is used to launch an HTTP request - handler from inetd, for example. The argument is the name of the repository. - -
    ˆ - Usage: fossil info ?ARTIFACT-ID|FILENAME? - With no arguments, provide information about the current tree. - If an argument is specified, provide information about the object - in the respository of the current tree that the argument refers - to. Or if the argument is the name of a repository, show - information about that repository. - -
    ˆ - Usage: fossil leaves - Find leaves of all branches. - -
    ˆ - Usage: fossil ls - Show the names of all files in the current checkout - -
    ˆ - Usage: fossil merge VERSION - The argument is a version that should be merged into the current - checkout. - Only file content is merged. The result continues to use the - file and directory names from the current check-out even if those - names might have been changed in the branch being merged in. - -
    ˆ - Usage: fossil mv|rename OLDNAME NEWNAME or: fossil mv|rename OLDNAME... DIR - - Move or rename one or more files within the tree - - This command does not rename the files on disk. All this command does is - record the fact that filenames have changed so that appropriate notations - can be made at the next commit/checkin. - -
    ˆ - Usage: fossil new FILENAME - - Create a repository for a new project in the file named FILENAME. - This command is distinct from "clone". The "clone" command makes - a copy of an existing project. This command starts a new project. - -
    ˆ - Usage: fossil open FILENAME - Open a connection to the local repository in FILENAME. A checkout - for the repository is created with its root at the working directory. - See also the "close" command. - -
    ˆ - Usage: fossil rstats - - Deliver a report of the repository statistics for the - current checkout. - -
    ˆ - Usage: fossil pull ?URL? ?-R|--respository REPOSITORY? - Pull changes in a remote repository into the local repository. - The repository is identified by the -R or --repository option. - If there is no such option then the open repository is used. - The URL of the remote server is specified on the command line - If no URL is specified then the URL used by the most recent - "pull", "push", or "sync" command is used. - - The URL is of the following form: - - http://USER@HOST:PORT/PATH - - The "USER@" and ":PORT" substrings are optional. - The "USER" substring specifies the login user. You will be - prompted for the password on the command-line. The PORT - specifies the TCP port of the server. The default port is - 80. - -
    ˆ - Usage: fossil push ?URL? ?-R|--repository REPOSITORY? - Push changes in the local repository over into a remote repository. - See the "pull" command for additional information. - -
    ˆ - Usage: fossil rebuild REPOSITORY - Reconstruct the named repository database from the core - records. Run this command after updating the fossil - executable in a way that changes the database schema. - -
    ˆ - COMMAND: reconstruct - Usage: fossil reconstruct REPOSITORY ORIGIN - Creates the REPOSITORY and populates it with the artifacts in the - indicated ORIGIN directory. - -
    ˆ - Usage: fossil redo ?FILENAME...? - Redo the an update or merge operation that has been undone by the - undo command. If FILENAME is specified then restore the changes - associated with the named file(s) but otherwise leave the update - or merge undone. - - A single level of undo/redo is supported. The undo/redo stack - is cleared by the commit and checkout commands. - -
    ˆ - Usage: fossil revert ?--yes? ?-r CHECKIN? FILE - Revert to the current repository version of FILE, or to - the version associated with check-in CHECKIN if the -r flag - appears. This command will confirm your operation unless the - file is missing or the --yes option is used. - -
    ˆ - Usage: fossil server ?-P|--port TCPPORT? ?REPOSITORY? Or: fossil ui ?-P|--port TCPPORT? ?REPOSITORY? - - Open a socket and begin listening and responding to HTTP requests on - TCP port 8080, or on any other TCP port defined by the -P or - --port option. The optional argument is the name of the repository. - The repository argument may be omitted if the working directory is - within an open checkout. - - The "ui" command automatically starts a web browser after initializing - the web server. - -
    ˆ - COMMAND: settings - COMMAND: unset - Usage: fossil settings ?PROPERTY? ?VALUE? ?-global? - fossil unset PROPERTY ?-global? - - The "settings" command with no arguments lists all properties and their - values. With just a property name it shows the value of that property. - With a value argument it changes the property for the current repository. - - The "unset" command clears a property setting. - - autosync If enabled, automatically pull prior to - commit or update and automatically push - after commit or tag or branch creation. - - diff-command External command to run when performing a diff. - If undefined, the internal text diff will be used. - - editor Text editor command used for check-in comments. - - http-port The TCP/IP port number to use by the "server" - and "ui" commands. Default: 8080 - - gdiff-command External command to run when performing a graphical - diff. If undefined, text diff will be used. - - localauth If enabled, require that HTTP connections from - 127.0.0.1 be authenticated by password. If - false, all HTTP requests from localhost have - unrestricted access to the repository. - - clearsign When enabled (the default), fossil will attempt to - sign all commits with gpg. When disabled, commits will - be unsigned. - - pgp-command Command used to clear-sign manifests at check-in. - The default is "gpg --clearsign -o ". - - mtime-changes Use file modification times (mtimes) to detect when - files have been modified. - - proxy URL of the HTTP proxy. If undefined or "on" then - the "http_proxy" environment variable is consulted. - If the http_proxy environment variable is undefined - then a direct HTTP connection is used. - - web-browser A shell command used to launch your preferred - web browser when given a URL as an argument. - Defaults to "start" on windows, "open" on Mac, - and "firefox" on Unix. - -
    ˆ - Usage: fossil status - Report on the status of the current checkout. - -
    ˆ - Usage: fossil sync ?URL? ?-R|--repository REPOSITORY? - Synchronize the local repository with a remote repository. This is - the equivalent of running both "push" and "pull" at the same time. - See the "pull" command for additional information. - -
    ˆ - Usage: fossil tag SUBCOMMAND ... - Run various subcommands to control tags and properties - - fossil tag add ?--raw? TAGNAME CHECK-IN ?VALUE? - - Add a new tag or property to CHECK-IN. The tag will - be usable instead of a CHECK-IN in commands such as - update and merge. - - fossil tag branch ?--raw? ?--nofork? TAGNAME CHECK-IN ?VALUE? - - A fork will be created so that the new checkin - is a sibling of CHECK-IN and identical to it except - for a generated comment. Then the new tag will - be added to the new checkin and propagated to - all direct children. Additionally all symbolic - tags of that checkin inherited from CHECK-IN will - be cancelled. - - However, if the option --nofork is given, no - fork will be created and the tag/property will be - added to CHECK-IN directly. No tags will be canceled. - - fossil tag cancel ?--raw? TAGNAME CHECK-IN - - Remove the tag TAGNAME from CHECK-IN, and also remove - the propagation of the tag to any descendants. - - fossil tag find ?--raw? TAGNAME - - List all check-ins that use TAGNAME - - fossil tag list ?--raw? ?CHECK-IN? - - List all tags, or if CHECK-IN is supplied, list - all tags and their values for CHECK-IN. - - The option --raw allows the manipulation of all types of - tags used for various internal purposes in fossil. You - should not use this option to make changes unless you are - sure what you are doing. - - If you need to use a tagname that might be confused with - a hexadecimal check-in or artifact ID, you can explicitly - disambiguate it by prefixing it with "tag:". For instance: - - fossil update decaf - - will be taken as an artifact or check-in ID and fossil will - probably complain that no such revision was found. However - - fossil update tag:decaf - - will assume that "decaf" is a tag/branch name. - -
    ˆ - Usage: fossil timeline ?WHEN? ?CHECK-IN|DATETIME? ?-n|--count N? - Print a summary of activity going backwards in date and time - specified or from the current date and time if no arguments - are given. Show as many as N (default 20) check-ins. The - WHEN argument can be any unique abbreviation of one of these - keywords: - - before - after - descendants | children - ancestors | parents - - The CHECK-IN can be any unique prefix of 4 characters or more. - The DATETIME should be in the ISO8601 format. For - examples: "2007-08-18 07:21:21". You can also say "current" - for the current version or "now" for the current time. - -
    ˆ - Usage: fossil undo ?FILENAME...? - Undo the most recent update or merge operation. If FILENAME is - specified then restore the content of the named file(s) but otherwise - leave the update or merge in effect. - - A single level of undo/redo is supported. The undo/redo stack - is cleared by the commit and checkout commands. - -
    ˆ - Usage: fossil update ?VERSION? ?--latest? - The optional argument is a version that should become the current - version. If the argument is omitted, then use the leaf of the - tree that begins with the current version, if there is only a single leaf. If there are a multiple leaves, the latest is used - if the --latest flag is present. - - This command is different from the "checkout" in that edits are - not overwritten. Edits are merged into the new version. - -
    ˆ - Usage: fossil user SUBCOMMAND ... ?-R|--repository FILE? - Run various subcommands on users of the open repository or of - the repository identified by the -R or --repository option. - - fossil user capabilities USERNAME ?STRING? - - Query or set the capabilities for user USERNAME - - fossil user default ?USERNAME? - - Query or set the default user. The default user is the - user for command-line interaction. - - fossil user list - - List all users known to the repository - - fossil user new ?USERNAME? - - Create a new user in the repository. Users can never be - deleted. They can be denied all access but they must continue - to exist in the database. - - fossil user password USERNAME - - Change the web access password for a user. - -
    ˆ - Usage: fossil version - Print the source code version number for the fossil executable. - -
    ˆ - Usage: fossil wiki (export|create|commit|list) WikiName - Run various subcommands to fetch wiki entries. - - fossil wiki export PAGENAME ?FILE? - - Sends the latest version of the PAGENAME wiki - entry to the given file or standard output. - - fossil wiki commit PAGENAME ?FILE? - - Commit changes to a wiki page from FILE or from standard. - - fossil wiki create PAGENAME ?FILE? - - Create a new wiki page with initial content taken from - FILE or from standard input. - - fossil wiki list - - Lists all wiki entries, one per line, ordered - case-insentively by name. - - TODOs: - - fossil wiki export ?-u ARTIFACT? WikiName ?FILE? - - Outputs the selected version of WikiName. - - fossil wiki delete ?-m MESSAGE? WikiName - - The same as deleting a file entry, but i don't know if fossil - supports a commit message for Wiki entries. - - fossil wiki ?-u? ?-d? ?-s=[|]? list - - Lists the artifact ID and/or Date of last change along with - each entry name, delimited by the -s char. - - fossil wiki diff ?ARTIFACT? ?-f infile[=stdin]? EntryName - - Diffs the local copy of a page with a given version (defaulting - to the head version). - -
    - -
    ˆ - -

    Caveats

    - This is not actually a reference, it's the start of a reference. - There are wikilinks to uncreated pages for the commands. This was - created by running the fossil help for each command listed by running - fossil help... Duplicate commands are only listed once (I - think). There are several bits of fossil that are not addressed - in the help for commands (special wiki directories, special users, etc.) - so they are (currently) not addressed here. Clarity and brevity may be - sacrificed for expediency at the authors indiscretion. All spelling and - grammatical mistakes are somebody elses fault. void * - prohibited where __C_PLUS_PLUS__ . Title and taxes extra. - Not valid in Hooptigonia. + + + This information can also viewed in the fossil gui using the url + PROJEKT-BASEURL/[/help|help]. You'll see a web page, listing all + available commands in the current fossil build. + + Each listed command is a link to a web page, displaying the detailed + command line help for the appropriate command. + + There are links to individual wiki pages for each command. These pages + are named cmd_COMMAND-NAME. These pages are not + defined for all commands - it's a work in progress. Existing pages give + more detailed description of the corresponding command. + +

    Caveats

    + This reference is complete concerning the [/help|list] of commands + and the detailed command line reference. It's always in sync with the + used fossil build, because it uses the original command help, which is + compiled into the binary. + + Additional, in-depth information in the wiki part is not available for + all commands. + + There are several bits of fossil that are not addressed + in the help for commands (special wiki directories, special users, etc.) + so they are (currently) not addressed here. Clarity and brevity may be + sacrificed for expediency at the authors indiscretion. All spelling and + grammatical mistakes are somebody elses fault. void * + prohibited where __C_PLUS_PLUS__ . Title and taxes extra. + Not valid in Hooptigonia. + +

    Testing fossil

    + There are several [/help?cmd=test|test commands] to test the + internals of fossil. These commands are listed on a special web page + [/help?cmd=test|help?cmd=test]. This page is the counter part of + fossil test-commands. +