Fossil SCM
merge trunk
Commit
645d57613d209d89b7d170b4353519c80326173d
Parent
483ebe5c6111b8d…
17 files changed
+11
-11
+22
-1
+3
-10
+69
-60
+7
-2
+14
-5
+55
-70
+55
-70
+3
-3
+11
-13
+23
-3
+3
-28
+59
-55
+47
+23
-22
+21
-21
M
auto.def
+11
-11
| --- auto.def | ||
| +++ auto.def | ||
| @@ -89,21 +89,10 @@ | ||
| 89 | 89 | if {[opt-bool static]} { |
| 90 | 90 | # XXX: This will not work on all systems. |
| 91 | 91 | define-append EXTRA_LDFLAGS -static |
| 92 | 92 | } |
| 93 | 93 | |
| 94 | -# Check for zlib, using the given location if specified | |
| 95 | -set zlibpath [opt-val with-zlib] | |
| 96 | -if {$zlibpath ne ""} { | |
| 97 | - cc-with [list -cflags "-I$zlibpath -L$zlibpath"] | |
| 98 | - define-append EXTRA_CFLAGS -I$zlibpath | |
| 99 | - define-append EXTRA_LDFLAGS -L$zlibpath | |
| 100 | -} | |
| 101 | -if {![cc-check-includes zlib.h] || ![cc-check-function-in-lib inflateEnd z]} { | |
| 102 | - user-error "zlib not found please install it or specify the location with --with-zlib" | |
| 103 | -} | |
| 104 | - | |
| 105 | 94 | set tclpath [opt-val with-tcl] |
| 106 | 95 | if {$tclpath ne ""} { |
| 107 | 96 | set tclprivatestubs [opt-bool with-tcl-private-stubs] |
| 108 | 97 | # Note parse-tclconfig-sh is in autosetup/local.tcl |
| 109 | 98 | if {$tclpath eq "1"} { |
| @@ -226,10 +215,21 @@ | ||
| 226 | 215 | } |
| 227 | 216 | } else { |
| 228 | 217 | user-error "OpenSSL not found. Consider --with-openssl=none to disable HTTPS support" |
| 229 | 218 | } |
| 230 | 219 | } |
| 220 | + | |
| 221 | +# Check for zlib, using the given location if specified | |
| 222 | +set zlibpath [opt-val with-zlib] | |
| 223 | +if {$zlibpath ne ""} { | |
| 224 | + cc-with [list -cflags "-I$zlibpath -L$zlibpath"] | |
| 225 | + define-append EXTRA_CFLAGS -I$zlibpath | |
| 226 | + define-append EXTRA_LDFLAGS -L$zlibpath | |
| 227 | +} | |
| 228 | +if {![cc-check-includes zlib.h] || ![cc-check-function-in-lib inflateEnd z]} { | |
| 229 | + user-error "zlib not found please install it or specify the location with --with-zlib" | |
| 230 | +} | |
| 231 | 231 | |
| 232 | 232 | if {[opt-bool lineedit]} { |
| 233 | 233 | # Need readline-compatible line editing |
| 234 | 234 | cc-with {-includes stdio.h} { |
| 235 | 235 | if {[cc-check-includes readline/readline.h] && [cc-check-function-in-lib readline readline]} { |
| 236 | 236 |
| --- auto.def | |
| +++ auto.def | |
| @@ -89,21 +89,10 @@ | |
| 89 | if {[opt-bool static]} { |
| 90 | # XXX: This will not work on all systems. |
| 91 | define-append EXTRA_LDFLAGS -static |
| 92 | } |
| 93 | |
| 94 | # Check for zlib, using the given location if specified |
| 95 | set zlibpath [opt-val with-zlib] |
| 96 | if {$zlibpath ne ""} { |
| 97 | cc-with [list -cflags "-I$zlibpath -L$zlibpath"] |
| 98 | define-append EXTRA_CFLAGS -I$zlibpath |
| 99 | define-append EXTRA_LDFLAGS -L$zlibpath |
| 100 | } |
| 101 | if {![cc-check-includes zlib.h] || ![cc-check-function-in-lib inflateEnd z]} { |
| 102 | user-error "zlib not found please install it or specify the location with --with-zlib" |
| 103 | } |
| 104 | |
| 105 | set tclpath [opt-val with-tcl] |
| 106 | if {$tclpath ne ""} { |
| 107 | set tclprivatestubs [opt-bool with-tcl-private-stubs] |
| 108 | # Note parse-tclconfig-sh is in autosetup/local.tcl |
| 109 | if {$tclpath eq "1"} { |
| @@ -226,10 +215,21 @@ | |
| 226 | } |
| 227 | } else { |
| 228 | user-error "OpenSSL not found. Consider --with-openssl=none to disable HTTPS support" |
| 229 | } |
| 230 | } |
| 231 | |
| 232 | if {[opt-bool lineedit]} { |
| 233 | # Need readline-compatible line editing |
| 234 | cc-with {-includes stdio.h} { |
| 235 | if {[cc-check-includes readline/readline.h] && [cc-check-function-in-lib readline readline]} { |
| 236 |
| --- auto.def | |
| +++ auto.def | |
| @@ -89,21 +89,10 @@ | |
| 89 | if {[opt-bool static]} { |
| 90 | # XXX: This will not work on all systems. |
| 91 | define-append EXTRA_LDFLAGS -static |
| 92 | } |
| 93 | |
| 94 | set tclpath [opt-val with-tcl] |
| 95 | if {$tclpath ne ""} { |
| 96 | set tclprivatestubs [opt-bool with-tcl-private-stubs] |
| 97 | # Note parse-tclconfig-sh is in autosetup/local.tcl |
| 98 | if {$tclpath eq "1"} { |
| @@ -226,10 +215,21 @@ | |
| 215 | } |
| 216 | } else { |
| 217 | user-error "OpenSSL not found. Consider --with-openssl=none to disable HTTPS support" |
| 218 | } |
| 219 | } |
| 220 | |
| 221 | # Check for zlib, using the given location if specified |
| 222 | set zlibpath [opt-val with-zlib] |
| 223 | if {$zlibpath ne ""} { |
| 224 | cc-with [list -cflags "-I$zlibpath -L$zlibpath"] |
| 225 | define-append EXTRA_CFLAGS -I$zlibpath |
| 226 | define-append EXTRA_LDFLAGS -L$zlibpath |
| 227 | } |
| 228 | if {![cc-check-includes zlib.h] || ![cc-check-function-in-lib inflateEnd z]} { |
| 229 | user-error "zlib not found please install it or specify the location with --with-zlib" |
| 230 | } |
| 231 | |
| 232 | if {[opt-bool lineedit]} { |
| 233 | # Need readline-compatible line editing |
| 234 | cc-with {-includes stdio.h} { |
| 235 | if {[cc-check-includes readline/readline.h] && [cc-check-function-in-lib readline readline]} { |
| 236 |
+22
| --- src/add.c | ||
| +++ src/add.c | ||
| @@ -221,19 +221,24 @@ | ||
| 221 | 221 | ** The --ignore and --clean options are comma-separate lists of glob patterns |
| 222 | 222 | ** for files to be excluded. Example: '*.o,*.obj,*.exe' If the --ignore |
| 223 | 223 | ** option does not appear on the command line then the "ignore-glob" setting |
| 224 | 224 | ** is used. If the --clean option does not appear on the command line then |
| 225 | 225 | ** the "clean-glob" setting is used. |
| 226 | +** | |
| 227 | +** If files are attempted to be added explicitly on the command line which | |
| 228 | +** match "ignore-glob", a confirmation is asked first. This can be prevented | |
| 229 | +** using the -f|--force option. | |
| 226 | 230 | ** |
| 227 | 231 | ** The --case-sensitive option determines whether or not filenames should |
| 228 | 232 | ** be treated case sensitive or not. If the option is not given, the default |
| 229 | 233 | ** depends on the global setting, or the operating system default, if not set. |
| 230 | 234 | ** |
| 231 | 235 | ** Options: |
| 232 | 236 | ** |
| 233 | 237 | ** --case-sensitive <BOOL> override case-sensitive setting |
| 234 | 238 | ** --dotfiles include files beginning with a dot (".") |
| 239 | +** -f|--force Add files without prompting | |
| 235 | 240 | ** --ignore <CSG> ignore files matching patterns from the |
| 236 | 241 | ** comma separated list of glob patterns. |
| 237 | 242 | ** --clean <CSG> also ignore files matching patterns from |
| 238 | 243 | ** the comma separated list of glob patterns. |
| 239 | 244 | ** |
| @@ -245,13 +250,15 @@ | ||
| 245 | 250 | int nRoot; /* Full path characters in g.zLocalRoot */ |
| 246 | 251 | const char *zCleanFlag; /* The --clean option or clean-glob setting */ |
| 247 | 252 | const char *zIgnoreFlag; /* The --ignore option or ignore-glob setting */ |
| 248 | 253 | Glob *pIgnore, *pClean; /* Ignore everything matching the glob patterns */ |
| 249 | 254 | unsigned scanFlags = 0; /* Flags passed to vfile_scan() */ |
| 255 | + int forceFlag; | |
| 250 | 256 | |
| 251 | 257 | zCleanFlag = find_option("clean",0,1); |
| 252 | 258 | zIgnoreFlag = find_option("ignore",0,1); |
| 259 | + forceFlag = find_option("force","f",0)!=0; | |
| 253 | 260 | if( find_option("dotfiles",0,0)!=0 ) scanFlags |= SCAN_ALL; |
| 254 | 261 | capture_case_sensitive_option(); |
| 255 | 262 | db_must_be_within_tree(); |
| 256 | 263 | if( zCleanFlag==0 ){ |
| 257 | 264 | zCleanFlag = db_get("clean-glob", 0); |
| @@ -287,10 +294,25 @@ | ||
| 287 | 294 | fossil_warning("not found: %s", zName); |
| 288 | 295 | }else if( file_access(zName, R_OK) ){ |
| 289 | 296 | fossil_fatal("cannot open %s", zName); |
| 290 | 297 | }else{ |
| 291 | 298 | char *zTreeName = &zName[nRoot]; |
| 299 | + if( !forceFlag && glob_match(pIgnore, zTreeName) ){ | |
| 300 | + Blob ans; | |
| 301 | + char cReply; | |
| 302 | + char *prompt = mprintf("file \"%s\" matches \"ignore-glob\". " | |
| 303 | + "Add it (a=all/y/N)? ", zTreeName); | |
| 304 | + prompt_user(prompt, &ans); | |
| 305 | + cReply = blob_str(&ans)[0]; | |
| 306 | + blob_reset(&ans); | |
| 307 | + if( cReply=='a' || cReply=='A' ){ | |
| 308 | + forceFlag = 1; | |
| 309 | + }else if( cReply!='y' && cReply!='Y' ){ | |
| 310 | + blob_reset(&fullName); | |
| 311 | + continue; | |
| 312 | + } | |
| 313 | + } | |
| 292 | 314 | db_multi_exec( |
| 293 | 315 | "INSERT OR IGNORE INTO sfile(x) VALUES(%Q)", |
| 294 | 316 | zTreeName |
| 295 | 317 | ); |
| 296 | 318 | } |
| 297 | 319 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -221,19 +221,24 @@ | |
| 221 | ** The --ignore and --clean options are comma-separate lists of glob patterns |
| 222 | ** for files to be excluded. Example: '*.o,*.obj,*.exe' If the --ignore |
| 223 | ** option does not appear on the command line then the "ignore-glob" setting |
| 224 | ** is used. If the --clean option does not appear on the command line then |
| 225 | ** the "clean-glob" setting is used. |
| 226 | ** |
| 227 | ** The --case-sensitive option determines whether or not filenames should |
| 228 | ** be treated case sensitive or not. If the option is not given, the default |
| 229 | ** depends on the global setting, or the operating system default, if not set. |
| 230 | ** |
| 231 | ** Options: |
| 232 | ** |
| 233 | ** --case-sensitive <BOOL> override case-sensitive setting |
| 234 | ** --dotfiles include files beginning with a dot (".") |
| 235 | ** --ignore <CSG> ignore files matching patterns from the |
| 236 | ** comma separated list of glob patterns. |
| 237 | ** --clean <CSG> also ignore files matching patterns from |
| 238 | ** the comma separated list of glob patterns. |
| 239 | ** |
| @@ -245,13 +250,15 @@ | |
| 245 | int nRoot; /* Full path characters in g.zLocalRoot */ |
| 246 | const char *zCleanFlag; /* The --clean option or clean-glob setting */ |
| 247 | const char *zIgnoreFlag; /* The --ignore option or ignore-glob setting */ |
| 248 | Glob *pIgnore, *pClean; /* Ignore everything matching the glob patterns */ |
| 249 | unsigned scanFlags = 0; /* Flags passed to vfile_scan() */ |
| 250 | |
| 251 | zCleanFlag = find_option("clean",0,1); |
| 252 | zIgnoreFlag = find_option("ignore",0,1); |
| 253 | if( find_option("dotfiles",0,0)!=0 ) scanFlags |= SCAN_ALL; |
| 254 | capture_case_sensitive_option(); |
| 255 | db_must_be_within_tree(); |
| 256 | if( zCleanFlag==0 ){ |
| 257 | zCleanFlag = db_get("clean-glob", 0); |
| @@ -287,10 +294,25 @@ | |
| 287 | fossil_warning("not found: %s", zName); |
| 288 | }else if( file_access(zName, R_OK) ){ |
| 289 | fossil_fatal("cannot open %s", zName); |
| 290 | }else{ |
| 291 | char *zTreeName = &zName[nRoot]; |
| 292 | db_multi_exec( |
| 293 | "INSERT OR IGNORE INTO sfile(x) VALUES(%Q)", |
| 294 | zTreeName |
| 295 | ); |
| 296 | } |
| 297 |
| --- src/add.c | |
| +++ src/add.c | |
| @@ -221,19 +221,24 @@ | |
| 221 | ** The --ignore and --clean options are comma-separate lists of glob patterns |
| 222 | ** for files to be excluded. Example: '*.o,*.obj,*.exe' If the --ignore |
| 223 | ** option does not appear on the command line then the "ignore-glob" setting |
| 224 | ** is used. If the --clean option does not appear on the command line then |
| 225 | ** the "clean-glob" setting is used. |
| 226 | ** |
| 227 | ** If files are attempted to be added explicitly on the command line which |
| 228 | ** match "ignore-glob", a confirmation is asked first. This can be prevented |
| 229 | ** using the -f|--force option. |
| 230 | ** |
| 231 | ** The --case-sensitive option determines whether or not filenames should |
| 232 | ** be treated case sensitive or not. If the option is not given, the default |
| 233 | ** depends on the global setting, or the operating system default, if not set. |
| 234 | ** |
| 235 | ** Options: |
| 236 | ** |
| 237 | ** --case-sensitive <BOOL> override case-sensitive setting |
| 238 | ** --dotfiles include files beginning with a dot (".") |
| 239 | ** -f|--force Add files without prompting |
| 240 | ** --ignore <CSG> ignore files matching patterns from the |
| 241 | ** comma separated list of glob patterns. |
| 242 | ** --clean <CSG> also ignore files matching patterns from |
| 243 | ** the comma separated list of glob patterns. |
| 244 | ** |
| @@ -245,13 +250,15 @@ | |
| 250 | int nRoot; /* Full path characters in g.zLocalRoot */ |
| 251 | const char *zCleanFlag; /* The --clean option or clean-glob setting */ |
| 252 | const char *zIgnoreFlag; /* The --ignore option or ignore-glob setting */ |
| 253 | Glob *pIgnore, *pClean; /* Ignore everything matching the glob patterns */ |
| 254 | unsigned scanFlags = 0; /* Flags passed to vfile_scan() */ |
| 255 | int forceFlag; |
| 256 | |
| 257 | zCleanFlag = find_option("clean",0,1); |
| 258 | zIgnoreFlag = find_option("ignore",0,1); |
| 259 | forceFlag = find_option("force","f",0)!=0; |
| 260 | if( find_option("dotfiles",0,0)!=0 ) scanFlags |= SCAN_ALL; |
| 261 | capture_case_sensitive_option(); |
| 262 | db_must_be_within_tree(); |
| 263 | if( zCleanFlag==0 ){ |
| 264 | zCleanFlag = db_get("clean-glob", 0); |
| @@ -287,10 +294,25 @@ | |
| 294 | fossil_warning("not found: %s", zName); |
| 295 | }else if( file_access(zName, R_OK) ){ |
| 296 | fossil_fatal("cannot open %s", zName); |
| 297 | }else{ |
| 298 | char *zTreeName = &zName[nRoot]; |
| 299 | if( !forceFlag && glob_match(pIgnore, zTreeName) ){ |
| 300 | Blob ans; |
| 301 | char cReply; |
| 302 | char *prompt = mprintf("file \"%s\" matches \"ignore-glob\". " |
| 303 | "Add it (a=all/y/N)? ", zTreeName); |
| 304 | prompt_user(prompt, &ans); |
| 305 | cReply = blob_str(&ans)[0]; |
| 306 | blob_reset(&ans); |
| 307 | if( cReply=='a' || cReply=='A' ){ |
| 308 | forceFlag = 1; |
| 309 | }else if( cReply!='y' && cReply!='Y' ){ |
| 310 | blob_reset(&fullName); |
| 311 | continue; |
| 312 | } |
| 313 | } |
| 314 | db_multi_exec( |
| 315 | "INSERT OR IGNORE INTO sfile(x) VALUES(%Q)", |
| 316 | zTreeName |
| 317 | ); |
| 318 | } |
| 319 |
-1
| --- src/branch.c | ||
| +++ src/branch.c | ||
| @@ -140,11 +140,10 @@ | ||
| 140 | 140 | md5sum_blob(&branch, &mcksum); |
| 141 | 141 | blob_appendf(&branch, "Z %b\n", &mcksum); |
| 142 | 142 | if( !noSign && clearsign(&branch, &branch) ){ |
| 143 | 143 | Blob ans; |
| 144 | 144 | char cReply; |
| 145 | - blob_zero(&ans); | |
| 146 | 145 | prompt_user("unable to sign manifest. continue (y/N)? ", &ans); |
| 147 | 146 | cReply = blob_str(&ans)[0]; |
| 148 | 147 | if( cReply!='y' && cReply!='Y'){ |
| 149 | 148 | db_end_transaction(1); |
| 150 | 149 | fossil_exit(1); |
| 151 | 150 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -140,11 +140,10 @@ | |
| 140 | md5sum_blob(&branch, &mcksum); |
| 141 | blob_appendf(&branch, "Z %b\n", &mcksum); |
| 142 | if( !noSign && clearsign(&branch, &branch) ){ |
| 143 | Blob ans; |
| 144 | char cReply; |
| 145 | blob_zero(&ans); |
| 146 | prompt_user("unable to sign manifest. continue (y/N)? ", &ans); |
| 147 | cReply = blob_str(&ans)[0]; |
| 148 | if( cReply!='y' && cReply!='Y'){ |
| 149 | db_end_transaction(1); |
| 150 | fossil_exit(1); |
| 151 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -140,11 +140,10 @@ | |
| 140 | md5sum_blob(&branch, &mcksum); |
| 141 | blob_appendf(&branch, "Z %b\n", &mcksum); |
| 142 | if( !noSign && clearsign(&branch, &branch) ){ |
| 143 | Blob ans; |
| 144 | char cReply; |
| 145 | prompt_user("unable to sign manifest. continue (y/N)? ", &ans); |
| 146 | cReply = blob_str(&ans)[0]; |
| 147 | if( cReply!='y' && cReply!='Y'){ |
| 148 | db_end_transaction(1); |
| 149 | fossil_exit(1); |
| 150 |
+3
-10
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -600,11 +600,10 @@ | ||
| 600 | 600 | if( !allFileFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 601 | 601 | Blob ans; |
| 602 | 602 | char cReply; |
| 603 | 603 | char *prompt = mprintf("Remove unmanaged file \"%s\" (a=all/y/N)? ", |
| 604 | 604 | zName+nRoot); |
| 605 | - blob_zero(&ans); | |
| 606 | 605 | prompt_user(prompt, &ans); |
| 607 | 606 | cReply = blob_str(&ans)[0]; |
| 608 | 607 | if( cReply=='a' || cReply=='A' ){ |
| 609 | 608 | allFileFlag = 1; |
| 610 | 609 | }else if( cReply!='y' && cReply!='Y' ){ |
| @@ -642,11 +641,10 @@ | ||
| 642 | 641 | if( !allDirFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 643 | 642 | Blob ans; |
| 644 | 643 | char cReply; |
| 645 | 644 | char *prompt = mprintf("Remove empty directory \"%s\" (a=all/y/N)? ", |
| 646 | 645 | zName+nRoot); |
| 647 | - blob_zero(&ans); | |
| 648 | 646 | prompt_user(prompt, &ans); |
| 649 | 647 | cReply = blob_str(&ans)[0]; |
| 650 | 648 | if( cReply=='a' || cReply=='A' ){ |
| 651 | 649 | allDirFlag = 1; |
| 652 | 650 | }else if( cReply!='y' && cReply!='Y' ){ |
| @@ -1288,11 +1286,10 @@ | ||
| 1288 | 1286 | } |
| 1289 | 1287 | zWarning = "Unicode"; |
| 1290 | 1288 | zDisable = "\"encoding-glob\" setting"; |
| 1291 | 1289 | } |
| 1292 | 1290 | file_relative_name(zFilename, &fname, 0); |
| 1293 | - blob_zero(&ans); | |
| 1294 | 1291 | zMsg = mprintf( |
| 1295 | 1292 | "%s contains %s. Use --no-warnings or the %s to disable this warning.\n" |
| 1296 | 1293 | "Commit anyhow (a=all/%sy/N)? ", |
| 1297 | 1294 | blob_str(&fname), zWarning, zDisable, zConvert); |
| 1298 | 1295 | prompt_user(zMsg, &ans); |
| @@ -1520,20 +1517,21 @@ | ||
| 1520 | 1517 | forceBaseline = 1; |
| 1521 | 1518 | } |
| 1522 | 1519 | |
| 1523 | 1520 | /* Get the ID of the parent manifest artifact */ |
| 1524 | 1521 | vid = db_lget_int("checkout", 0); |
| 1525 | - if( content_is_private(vid) ){ | |
| 1522 | + if( vid==0 ){ | |
| 1523 | + useCksum = 1; | |
| 1524 | + }else if( content_is_private(vid) ){ | |
| 1526 | 1525 | g.markPrivate = 1; |
| 1527 | 1526 | } |
| 1528 | 1527 | |
| 1529 | 1528 | /* |
| 1530 | 1529 | ** Autosync if autosync is enabled and this is not a private check-in. |
| 1531 | 1530 | */ |
| 1532 | 1531 | if( !g.markPrivate ){ |
| 1533 | 1532 | if( autosync(SYNC_PULL) ){ |
| 1534 | - blob_zero(&ans); | |
| 1535 | 1533 | prompt_user("continue in spite of sync failure (y/N)? ", &ans); |
| 1536 | 1534 | cReply = blob_str(&ans)[0]; |
| 1537 | 1535 | if( cReply!='y' && cReply!='Y' ){ |
| 1538 | 1536 | fossil_exit(1); |
| 1539 | 1537 | } |
| @@ -1542,11 +1540,10 @@ | ||
| 1542 | 1540 | |
| 1543 | 1541 | /* Require confirmation to continue with the check-in if there is |
| 1544 | 1542 | ** clock skew |
| 1545 | 1543 | */ |
| 1546 | 1544 | if( g.clockSkewSeen ){ |
| 1547 | - blob_zero(&ans); | |
| 1548 | 1545 | prompt_user("continue in spite of time skew (y/N)? ", &ans); |
| 1549 | 1546 | cReply = blob_str(&ans)[0]; |
| 1550 | 1547 | if( cReply!='y' && cReply!='Y' ){ |
| 1551 | 1548 | fossil_exit(1); |
| 1552 | 1549 | } |
| @@ -1561,11 +1558,10 @@ | ||
| 1561 | 1558 | ** array is allocated to contain the "id" field from the vfile table |
| 1562 | 1559 | ** for each file to be committed. Or, if aCommitFile is NULL, all files |
| 1563 | 1560 | ** should be committed. |
| 1564 | 1561 | */ |
| 1565 | 1562 | if( select_commit_files() ){ |
| 1566 | - blob_zero(&ans); | |
| 1567 | 1563 | prompt_user("continue (y/N)? ", &ans); |
| 1568 | 1564 | cReply = blob_str(&ans)[0]; |
| 1569 | 1565 | if( cReply!='y' && cReply!='Y' ) fossil_exit(1);; |
| 1570 | 1566 | } |
| 1571 | 1567 | isAMerge = db_exists("SELECT 1 FROM vmerge WHERE id=0 OR id<-2"); |
| @@ -1662,20 +1658,18 @@ | ||
| 1662 | 1658 | blob_zero(&comment); |
| 1663 | 1659 | }else{ |
| 1664 | 1660 | char *zInit = db_text(0, "SELECT value FROM vvar WHERE name='ci-comment'"); |
| 1665 | 1661 | prepare_commit_comment(&comment, zInit, &sCiInfo, vid); |
| 1666 | 1662 | if( zInit && zInit[0] && fossil_strcmp(zInit, blob_str(&comment))==0 ){ |
| 1667 | - blob_zero(&ans); | |
| 1668 | 1663 | prompt_user("unchanged check-in comment. continue (y/N)? ", &ans); |
| 1669 | 1664 | cReply = blob_str(&ans)[0]; |
| 1670 | 1665 | if( cReply!='y' && cReply!='Y' ) fossil_exit(1);; |
| 1671 | 1666 | } |
| 1672 | 1667 | free(zInit); |
| 1673 | 1668 | } |
| 1674 | 1669 | if( blob_size(&comment)==0 ){ |
| 1675 | 1670 | if( !dryRunFlag ){ |
| 1676 | - blob_zero(&ans); | |
| 1677 | 1671 | prompt_user("empty check-in comment. continue (y/N)? ", &ans); |
| 1678 | 1672 | cReply = blob_str(&ans)[0]; |
| 1679 | 1673 | if( cReply!='y' && cReply!='Y' ){ |
| 1680 | 1674 | fossil_exit(1); |
| 1681 | 1675 | } |
| @@ -1804,11 +1798,10 @@ | ||
| 1804 | 1798 | }else if( forceDelta ){ |
| 1805 | 1799 | fossil_fatal("unable to find a baseline-manifest for the delta"); |
| 1806 | 1800 | } |
| 1807 | 1801 | } |
| 1808 | 1802 | if( !noSign && !g.markPrivate && clearsign(&manifest, &manifest) ){ |
| 1809 | - blob_zero(&ans); | |
| 1810 | 1803 | prompt_user("unable to sign manifest. continue (y/N)? ", &ans); |
| 1811 | 1804 | cReply = blob_str(&ans)[0]; |
| 1812 | 1805 | if( cReply!='y' && cReply!='Y' ){ |
| 1813 | 1806 | fossil_exit(1); |
| 1814 | 1807 | } |
| 1815 | 1808 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -600,11 +600,10 @@ | |
| 600 | if( !allFileFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 601 | Blob ans; |
| 602 | char cReply; |
| 603 | char *prompt = mprintf("Remove unmanaged file \"%s\" (a=all/y/N)? ", |
| 604 | zName+nRoot); |
| 605 | blob_zero(&ans); |
| 606 | prompt_user(prompt, &ans); |
| 607 | cReply = blob_str(&ans)[0]; |
| 608 | if( cReply=='a' || cReply=='A' ){ |
| 609 | allFileFlag = 1; |
| 610 | }else if( cReply!='y' && cReply!='Y' ){ |
| @@ -642,11 +641,10 @@ | |
| 642 | if( !allDirFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 643 | Blob ans; |
| 644 | char cReply; |
| 645 | char *prompt = mprintf("Remove empty directory \"%s\" (a=all/y/N)? ", |
| 646 | zName+nRoot); |
| 647 | blob_zero(&ans); |
| 648 | prompt_user(prompt, &ans); |
| 649 | cReply = blob_str(&ans)[0]; |
| 650 | if( cReply=='a' || cReply=='A' ){ |
| 651 | allDirFlag = 1; |
| 652 | }else if( cReply!='y' && cReply!='Y' ){ |
| @@ -1288,11 +1286,10 @@ | |
| 1288 | } |
| 1289 | zWarning = "Unicode"; |
| 1290 | zDisable = "\"encoding-glob\" setting"; |
| 1291 | } |
| 1292 | file_relative_name(zFilename, &fname, 0); |
| 1293 | blob_zero(&ans); |
| 1294 | zMsg = mprintf( |
| 1295 | "%s contains %s. Use --no-warnings or the %s to disable this warning.\n" |
| 1296 | "Commit anyhow (a=all/%sy/N)? ", |
| 1297 | blob_str(&fname), zWarning, zDisable, zConvert); |
| 1298 | prompt_user(zMsg, &ans); |
| @@ -1520,20 +1517,21 @@ | |
| 1520 | forceBaseline = 1; |
| 1521 | } |
| 1522 | |
| 1523 | /* Get the ID of the parent manifest artifact */ |
| 1524 | vid = db_lget_int("checkout", 0); |
| 1525 | if( content_is_private(vid) ){ |
| 1526 | g.markPrivate = 1; |
| 1527 | } |
| 1528 | |
| 1529 | /* |
| 1530 | ** Autosync if autosync is enabled and this is not a private check-in. |
| 1531 | */ |
| 1532 | if( !g.markPrivate ){ |
| 1533 | if( autosync(SYNC_PULL) ){ |
| 1534 | blob_zero(&ans); |
| 1535 | prompt_user("continue in spite of sync failure (y/N)? ", &ans); |
| 1536 | cReply = blob_str(&ans)[0]; |
| 1537 | if( cReply!='y' && cReply!='Y' ){ |
| 1538 | fossil_exit(1); |
| 1539 | } |
| @@ -1542,11 +1540,10 @@ | |
| 1542 | |
| 1543 | /* Require confirmation to continue with the check-in if there is |
| 1544 | ** clock skew |
| 1545 | */ |
| 1546 | if( g.clockSkewSeen ){ |
| 1547 | blob_zero(&ans); |
| 1548 | prompt_user("continue in spite of time skew (y/N)? ", &ans); |
| 1549 | cReply = blob_str(&ans)[0]; |
| 1550 | if( cReply!='y' && cReply!='Y' ){ |
| 1551 | fossil_exit(1); |
| 1552 | } |
| @@ -1561,11 +1558,10 @@ | |
| 1561 | ** array is allocated to contain the "id" field from the vfile table |
| 1562 | ** for each file to be committed. Or, if aCommitFile is NULL, all files |
| 1563 | ** should be committed. |
| 1564 | */ |
| 1565 | if( select_commit_files() ){ |
| 1566 | blob_zero(&ans); |
| 1567 | prompt_user("continue (y/N)? ", &ans); |
| 1568 | cReply = blob_str(&ans)[0]; |
| 1569 | if( cReply!='y' && cReply!='Y' ) fossil_exit(1);; |
| 1570 | } |
| 1571 | isAMerge = db_exists("SELECT 1 FROM vmerge WHERE id=0 OR id<-2"); |
| @@ -1662,20 +1658,18 @@ | |
| 1662 | blob_zero(&comment); |
| 1663 | }else{ |
| 1664 | char *zInit = db_text(0, "SELECT value FROM vvar WHERE name='ci-comment'"); |
| 1665 | prepare_commit_comment(&comment, zInit, &sCiInfo, vid); |
| 1666 | if( zInit && zInit[0] && fossil_strcmp(zInit, blob_str(&comment))==0 ){ |
| 1667 | blob_zero(&ans); |
| 1668 | prompt_user("unchanged check-in comment. continue (y/N)? ", &ans); |
| 1669 | cReply = blob_str(&ans)[0]; |
| 1670 | if( cReply!='y' && cReply!='Y' ) fossil_exit(1);; |
| 1671 | } |
| 1672 | free(zInit); |
| 1673 | } |
| 1674 | if( blob_size(&comment)==0 ){ |
| 1675 | if( !dryRunFlag ){ |
| 1676 | blob_zero(&ans); |
| 1677 | prompt_user("empty check-in comment. continue (y/N)? ", &ans); |
| 1678 | cReply = blob_str(&ans)[0]; |
| 1679 | if( cReply!='y' && cReply!='Y' ){ |
| 1680 | fossil_exit(1); |
| 1681 | } |
| @@ -1804,11 +1798,10 @@ | |
| 1804 | }else if( forceDelta ){ |
| 1805 | fossil_fatal("unable to find a baseline-manifest for the delta"); |
| 1806 | } |
| 1807 | } |
| 1808 | if( !noSign && !g.markPrivate && clearsign(&manifest, &manifest) ){ |
| 1809 | blob_zero(&ans); |
| 1810 | prompt_user("unable to sign manifest. continue (y/N)? ", &ans); |
| 1811 | cReply = blob_str(&ans)[0]; |
| 1812 | if( cReply!='y' && cReply!='Y' ){ |
| 1813 | fossil_exit(1); |
| 1814 | } |
| 1815 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -600,11 +600,10 @@ | |
| 600 | if( !allFileFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 601 | Blob ans; |
| 602 | char cReply; |
| 603 | char *prompt = mprintf("Remove unmanaged file \"%s\" (a=all/y/N)? ", |
| 604 | zName+nRoot); |
| 605 | prompt_user(prompt, &ans); |
| 606 | cReply = blob_str(&ans)[0]; |
| 607 | if( cReply=='a' || cReply=='A' ){ |
| 608 | allFileFlag = 1; |
| 609 | }else if( cReply!='y' && cReply!='Y' ){ |
| @@ -642,11 +641,10 @@ | |
| 641 | if( !allDirFlag && !dryRunFlag && !glob_match(pClean, zName+nRoot) ){ |
| 642 | Blob ans; |
| 643 | char cReply; |
| 644 | char *prompt = mprintf("Remove empty directory \"%s\" (a=all/y/N)? ", |
| 645 | zName+nRoot); |
| 646 | prompt_user(prompt, &ans); |
| 647 | cReply = blob_str(&ans)[0]; |
| 648 | if( cReply=='a' || cReply=='A' ){ |
| 649 | allDirFlag = 1; |
| 650 | }else if( cReply!='y' && cReply!='Y' ){ |
| @@ -1288,11 +1286,10 @@ | |
| 1286 | } |
| 1287 | zWarning = "Unicode"; |
| 1288 | zDisable = "\"encoding-glob\" setting"; |
| 1289 | } |
| 1290 | file_relative_name(zFilename, &fname, 0); |
| 1291 | zMsg = mprintf( |
| 1292 | "%s contains %s. Use --no-warnings or the %s to disable this warning.\n" |
| 1293 | "Commit anyhow (a=all/%sy/N)? ", |
| 1294 | blob_str(&fname), zWarning, zDisable, zConvert); |
| 1295 | prompt_user(zMsg, &ans); |
| @@ -1520,20 +1517,21 @@ | |
| 1517 | forceBaseline = 1; |
| 1518 | } |
| 1519 | |
| 1520 | /* Get the ID of the parent manifest artifact */ |
| 1521 | vid = db_lget_int("checkout", 0); |
| 1522 | if( vid==0 ){ |
| 1523 | useCksum = 1; |
| 1524 | }else if( content_is_private(vid) ){ |
| 1525 | g.markPrivate = 1; |
| 1526 | } |
| 1527 | |
| 1528 | /* |
| 1529 | ** Autosync if autosync is enabled and this is not a private check-in. |
| 1530 | */ |
| 1531 | if( !g.markPrivate ){ |
| 1532 | if( autosync(SYNC_PULL) ){ |
| 1533 | prompt_user("continue in spite of sync failure (y/N)? ", &ans); |
| 1534 | cReply = blob_str(&ans)[0]; |
| 1535 | if( cReply!='y' && cReply!='Y' ){ |
| 1536 | fossil_exit(1); |
| 1537 | } |
| @@ -1542,11 +1540,10 @@ | |
| 1540 | |
| 1541 | /* Require confirmation to continue with the check-in if there is |
| 1542 | ** clock skew |
| 1543 | */ |
| 1544 | if( g.clockSkewSeen ){ |
| 1545 | prompt_user("continue in spite of time skew (y/N)? ", &ans); |
| 1546 | cReply = blob_str(&ans)[0]; |
| 1547 | if( cReply!='y' && cReply!='Y' ){ |
| 1548 | fossil_exit(1); |
| 1549 | } |
| @@ -1561,11 +1558,10 @@ | |
| 1558 | ** array is allocated to contain the "id" field from the vfile table |
| 1559 | ** for each file to be committed. Or, if aCommitFile is NULL, all files |
| 1560 | ** should be committed. |
| 1561 | */ |
| 1562 | if( select_commit_files() ){ |
| 1563 | prompt_user("continue (y/N)? ", &ans); |
| 1564 | cReply = blob_str(&ans)[0]; |
| 1565 | if( cReply!='y' && cReply!='Y' ) fossil_exit(1);; |
| 1566 | } |
| 1567 | isAMerge = db_exists("SELECT 1 FROM vmerge WHERE id=0 OR id<-2"); |
| @@ -1662,20 +1658,18 @@ | |
| 1658 | blob_zero(&comment); |
| 1659 | }else{ |
| 1660 | char *zInit = db_text(0, "SELECT value FROM vvar WHERE name='ci-comment'"); |
| 1661 | prepare_commit_comment(&comment, zInit, &sCiInfo, vid); |
| 1662 | if( zInit && zInit[0] && fossil_strcmp(zInit, blob_str(&comment))==0 ){ |
| 1663 | prompt_user("unchanged check-in comment. continue (y/N)? ", &ans); |
| 1664 | cReply = blob_str(&ans)[0]; |
| 1665 | if( cReply!='y' && cReply!='Y' ) fossil_exit(1);; |
| 1666 | } |
| 1667 | free(zInit); |
| 1668 | } |
| 1669 | if( blob_size(&comment)==0 ){ |
| 1670 | if( !dryRunFlag ){ |
| 1671 | prompt_user("empty check-in comment. continue (y/N)? ", &ans); |
| 1672 | cReply = blob_str(&ans)[0]; |
| 1673 | if( cReply!='y' && cReply!='Y' ){ |
| 1674 | fossil_exit(1); |
| 1675 | } |
| @@ -1804,11 +1798,10 @@ | |
| 1798 | }else if( forceDelta ){ |
| 1799 | fossil_fatal("unable to find a baseline-manifest for the delta"); |
| 1800 | } |
| 1801 | } |
| 1802 | if( !noSign && !g.markPrivate && clearsign(&manifest, &manifest) ){ |
| 1803 | prompt_user("unable to sign manifest. continue (y/N)? ", &ans); |
| 1804 | cReply = blob_str(&ans)[0]; |
| 1805 | if( cReply!='y' && cReply!='Y' ){ |
| 1806 | fossil_exit(1); |
| 1807 | } |
| 1808 |
M
src/db.c
+69
-60
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -715,11 +715,11 @@ | ||
| 715 | 715 | */ |
| 716 | 716 | LOCAL sqlite3 *db_open(const char *zDbName){ |
| 717 | 717 | int rc; |
| 718 | 718 | sqlite3 *db; |
| 719 | 719 | |
| 720 | -#if defined(__CYGWIN__) | |
| 720 | +#if defined(__CYGWIN__) && !defined(USE_SYSTEM_SQLITE) | |
| 721 | 721 | zDbName = fossil_utf8_to_filename(zDbName); |
| 722 | 722 | #endif |
| 723 | 723 | if( g.fSqlTrace ) fossil_trace("-- sqlite3_open: [%s]\n", zDbName); |
| 724 | 724 | rc = sqlite3_open_v2( |
| 725 | 725 | zDbName, &db, |
| @@ -1989,23 +1989,28 @@ | ||
| 1989 | 1989 | ** If VERSION is specified then that version is checked out. Otherwise |
| 1990 | 1990 | ** the latest version is checked out. No files other than "manifest" |
| 1991 | 1991 | ** and "manifest.uuid" are modified if the --keep option is present. |
| 1992 | 1992 | ** |
| 1993 | 1993 | ** Options: |
| 1994 | +** --empty Initialize checkout as being empty, but still connected | |
| 1995 | +** with the local repository. If you commit this checkout, | |
| 1996 | +** it will become a new "initial" commit in the repository. | |
| 1994 | 1997 | ** --keep Only modify the manifest and manifest.uuid files |
| 1995 | 1998 | ** --nested Allow opening a repository inside an opened checkout |
| 1996 | 1999 | ** |
| 1997 | 2000 | ** See also: close |
| 1998 | 2001 | */ |
| 1999 | 2002 | void cmd_open(void){ |
| 2003 | + int emptyFlag; | |
| 2000 | 2004 | int keepFlag; |
| 2001 | 2005 | int allowNested; |
| 2002 | 2006 | char **oldArgv; |
| 2003 | 2007 | int oldArgc; |
| 2004 | 2008 | static char *azNewArgv[] = { 0, "checkout", "--prompt", 0, 0, 0 }; |
| 2005 | 2009 | |
| 2006 | 2010 | url_proxy_options(); |
| 2011 | + emptyFlag = find_option("empty",0,0)!=0; | |
| 2007 | 2012 | keepFlag = find_option("keep",0,0)!=0; |
| 2008 | 2013 | allowNested = find_option("nested",0,0)!=0; |
| 2009 | 2014 | if( g.argc!=3 && g.argc!=4 ){ |
| 2010 | 2015 | usage("REPOSITORY-FILENAME ?VERSION?"); |
| 2011 | 2016 | } |
| @@ -2030,22 +2035,24 @@ | ||
| 2030 | 2035 | db_lset_int("checkout", 0); |
| 2031 | 2036 | oldArgv = g.argv; |
| 2032 | 2037 | oldArgc = g.argc; |
| 2033 | 2038 | azNewArgv[0] = g.argv[0]; |
| 2034 | 2039 | g.argv = azNewArgv; |
| 2035 | - g.argc = 3; | |
| 2036 | - if( oldArgc==4 ){ | |
| 2037 | - azNewArgv[g.argc-1] = oldArgv[3]; | |
| 2038 | - }else if( !db_exists("SELECT 1 FROM event WHERE type='ci'") ){ | |
| 2039 | - azNewArgv[g.argc-1] = "--latest"; | |
| 2040 | - }else{ | |
| 2041 | - azNewArgv[g.argc-1] = db_get("main-branch", "trunk"); | |
| 2042 | - } | |
| 2043 | - if( keepFlag ){ | |
| 2044 | - azNewArgv[g.argc++] = "--keep"; | |
| 2045 | - } | |
| 2046 | - checkout_cmd(); | |
| 2040 | + if( !emptyFlag){ | |
| 2041 | + g.argc = 3; | |
| 2042 | + if( oldArgc==4 ){ | |
| 2043 | + azNewArgv[g.argc-1] = oldArgv[3]; | |
| 2044 | + }else if( !db_exists("SELECT 1 FROM event WHERE type='ci'") ){ | |
| 2045 | + azNewArgv[g.argc-1] = "--latest"; | |
| 2046 | + }else{ | |
| 2047 | + azNewArgv[g.argc-1] = db_get("main-branch", "trunk"); | |
| 2048 | + } | |
| 2049 | + if( keepFlag ){ | |
| 2050 | + azNewArgv[g.argc++] = "--keep"; | |
| 2051 | + } | |
| 2052 | + checkout_cmd(); | |
| 2053 | + } | |
| 2047 | 2054 | g.argc = 2; |
| 2048 | 2055 | info_cmd(); |
| 2049 | 2056 | } |
| 2050 | 2057 | |
| 2051 | 2058 | /* |
| @@ -2101,66 +2108,68 @@ | ||
| 2101 | 2108 | */ |
| 2102 | 2109 | #if INTERFACE |
| 2103 | 2110 | struct stControlSettings { |
| 2104 | 2111 | char const *name; /* Name of the setting */ |
| 2105 | 2112 | char const *var; /* Internal variable name used by db_set() */ |
| 2106 | - int width; /* Width of display. 0 for boolean values */ | |
| 2113 | + int width; /* Width of display. 0 for boolean values. */ | |
| 2107 | 2114 | int versionable; /* Is this setting versionable? */ |
| 2115 | + int forceTextArea; /* Force using a text area for display? */ | |
| 2108 | 2116 | char const *def; /* Default value */ |
| 2109 | 2117 | }; |
| 2110 | 2118 | #endif /* INTERFACE */ |
| 2111 | 2119 | struct stControlSettings const ctrlSettings[] = { |
| 2112 | - { "access-log", 0, 0, 0, "off" }, | |
| 2113 | - { "allow-symlinks",0, 0, 1, "off" }, | |
| 2114 | - { "auto-captcha", "autocaptcha", 0, 0, "on" }, | |
| 2115 | - { "auto-hyperlink",0, 0, 0, "on", }, | |
| 2116 | - { "auto-shun", 0, 0, 0, "on" }, | |
| 2117 | - { "autosync", 0, 0, 0, "on" }, | |
| 2118 | - { "binary-glob", 0, 40, 1, "" }, | |
| 2119 | - { "clearsign", 0, 0, 0, "off" }, | |
| 2120 | -#if defined(_WIN32) || defined(__CYGWIN__) || defined(__DARWIN__) || defined(__APPLE__) | |
| 2121 | - { "case-sensitive",0, 0, 0, "off" }, | |
| 2120 | + { "access-log", 0, 0, 0, 0, "off" }, | |
| 2121 | + { "allow-symlinks", 0, 0, 1, 0, "off" }, | |
| 2122 | + { "auto-captcha", "autocaptcha", 0, 0, 0, "on" }, | |
| 2123 | + { "auto-hyperlink", 0, 0, 0, 0, "on", }, | |
| 2124 | + { "auto-shun", 0, 0, 0, 0, "on" }, | |
| 2125 | + { "autosync", 0, 0, 0, 0, "on" }, | |
| 2126 | + { "binary-glob", 0, 40, 1, 0, "" }, | |
| 2127 | + { "clearsign", 0, 0, 0, 0, "off" }, | |
| 2128 | +#if defined(_WIN32) || defined(__CYGWIN__) || defined(__DARWIN__) || \ | |
| 2129 | + defined(__APPLE__) | |
| 2130 | + { "case-sensitive", 0, 0, 0, 0, "off" }, | |
| 2122 | 2131 | #else |
| 2123 | - { "case-sensitive",0, 0, 0, "on" }, | |
| 2132 | + { "case-sensitive", 0, 0, 0, 0, "on" }, | |
| 2124 | 2133 | #endif |
| 2125 | - { "clean-glob", 0, 40, 1, "" }, | |
| 2126 | - { "crnl-glob", 0, 40, 1, "" }, | |
| 2127 | - { "default-perms", 0, 16, 0, "u" }, | |
| 2128 | - { "diff-binary", 0, 0, 0, "on" }, | |
| 2129 | - { "diff-command", 0, 40, 0, "" }, | |
| 2130 | - { "dont-push", 0, 0, 0, "off" }, | |
| 2131 | - { "editor", 0, 32, 0, "" }, | |
| 2132 | - { "empty-dirs", 0, 40, 1, "" }, | |
| 2133 | - { "encoding-glob", 0, 40, 1, "" }, | |
| 2134 | - { "gdiff-command", 0, 40, 0, "gdiff" }, | |
| 2135 | - { "gmerge-command",0, 40, 0, "" }, | |
| 2136 | - { "http-port", 0, 16, 0, "8080" }, | |
| 2137 | - { "https-login", 0, 0, 0, "off" }, | |
| 2138 | - { "ignore-glob", 0, 40, 1, "" }, | |
| 2139 | - { "keep-glob", 0, 40, 1, "" }, | |
| 2140 | - { "localauth", 0, 0, 0, "off" }, | |
| 2141 | - { "main-branch", 0, 40, 0, "trunk" }, | |
| 2142 | - { "manifest", 0, 0, 1, "off" }, | |
| 2143 | - { "max-upload", 0, 25, 0, "250000" }, | |
| 2144 | - { "mtime-changes", 0, 0, 0, "on" }, | |
| 2145 | - { "pgp-command", 0, 40, 0, "gpg --clearsign -o " }, | |
| 2146 | - { "proxy", 0, 32, 0, "off" }, | |
| 2147 | - { "relative-paths",0, 0, 0, "on" }, | |
| 2148 | - { "repo-cksum", 0, 0, 0, "on" }, | |
| 2149 | - { "self-register", 0, 0, 0, "off" }, | |
| 2150 | - { "ssh-command", 0, 40, 0, "" }, | |
| 2151 | - { "ssl-ca-location",0, 40, 0, "" }, | |
| 2152 | - { "ssl-identity", 0, 40, 0, "" }, | |
| 2134 | + { "clean-glob", 0, 40, 1, 0, "" }, | |
| 2135 | + { "crnl-glob", 0, 40, 1, 0, "" }, | |
| 2136 | + { "default-perms", 0, 16, 0, 0, "u" }, | |
| 2137 | + { "diff-binary", 0, 0, 0, 0, "on" }, | |
| 2138 | + { "diff-command", 0, 40, 0, 0, "" }, | |
| 2139 | + { "dont-push", 0, 0, 0, 0, "off" }, | |
| 2140 | + { "editor", 0, 32, 0, 0, "" }, | |
| 2141 | + { "empty-dirs", 0, 40, 1, 0, "" }, | |
| 2142 | + { "encoding-glob", 0, 40, 1, 0, "" }, | |
| 2143 | + { "gdiff-command", 0, 40, 0, 0, "gdiff" }, | |
| 2144 | + { "gmerge-command", 0, 40, 0, 0, "" }, | |
| 2145 | + { "http-port", 0, 16, 0, 0, "8080" }, | |
| 2146 | + { "https-login", 0, 0, 0, 0, "off" }, | |
| 2147 | + { "ignore-glob", 0, 40, 1, 0, "" }, | |
| 2148 | + { "keep-glob", 0, 40, 1, 0, "" }, | |
| 2149 | + { "localauth", 0, 0, 0, 0, "off" }, | |
| 2150 | + { "main-branch", 0, 40, 0, 0, "trunk" }, | |
| 2151 | + { "manifest", 0, 0, 1, 0, "off" }, | |
| 2152 | + { "max-upload", 0, 25, 0, 0, "250000" }, | |
| 2153 | + { "mtime-changes", 0, 0, 0, 0, "on" }, | |
| 2154 | + { "pgp-command", 0, 40, 0, 0, "gpg --clearsign -o " }, | |
| 2155 | + { "proxy", 0, 32, 0, 0, "off" }, | |
| 2156 | + { "relative-paths", 0, 0, 0, 0, "on" }, | |
| 2157 | + { "repo-cksum", 0, 0, 0, 0, "on" }, | |
| 2158 | + { "self-register", 0, 0, 0, 0, "off" }, | |
| 2159 | + { "ssh-command", 0, 40, 0, 0, "" }, | |
| 2160 | + { "ssl-ca-location", 0, 40, 0, 0, "" }, | |
| 2161 | + { "ssl-identity", 0, 40, 0, 0, "" }, | |
| 2153 | 2162 | #ifdef FOSSIL_ENABLE_TCL |
| 2154 | - { "tcl", 0, 0, 0, "off" }, | |
| 2155 | - { "tcl-setup", 0, 40, 0, "" }, | |
| 2163 | + { "tcl", 0, 0, 0, 0, "off" }, | |
| 2164 | + { "tcl-setup", 0, 40, 0, 1, "" }, | |
| 2156 | 2165 | #endif |
| 2157 | - { "th1-setup", 0, 40, 0, "" }, | |
| 2158 | - { "th1-uri-regexp",0, 40, 0, "" }, | |
| 2159 | - { "web-browser", 0, 32, 0, "" }, | |
| 2160 | - { "white-foreground", 0, 0, 0, "off" }, | |
| 2161 | - { 0,0,0,0,0 } | |
| 2166 | + { "th1-setup", 0, 40, 0, 1, "" }, | |
| 2167 | + { "th1-uri-regexp", 0, 40, 0, 0, "" }, | |
| 2168 | + { "web-browser", 0, 32, 0, 0, "" }, | |
| 2169 | + { "white-foreground", 0, 0, 0, 0, "off" }, | |
| 2170 | + { 0,0,0,0,0,0 } | |
| 2162 | 2171 | }; |
| 2163 | 2172 | |
| 2164 | 2173 | /* |
| 2165 | 2174 | ** COMMAND: settings |
| 2166 | 2175 | ** COMMAND: unset* |
| 2167 | 2176 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -715,11 +715,11 @@ | |
| 715 | */ |
| 716 | LOCAL sqlite3 *db_open(const char *zDbName){ |
| 717 | int rc; |
| 718 | sqlite3 *db; |
| 719 | |
| 720 | #if defined(__CYGWIN__) |
| 721 | zDbName = fossil_utf8_to_filename(zDbName); |
| 722 | #endif |
| 723 | if( g.fSqlTrace ) fossil_trace("-- sqlite3_open: [%s]\n", zDbName); |
| 724 | rc = sqlite3_open_v2( |
| 725 | zDbName, &db, |
| @@ -1989,23 +1989,28 @@ | |
| 1989 | ** If VERSION is specified then that version is checked out. Otherwise |
| 1990 | ** the latest version is checked out. No files other than "manifest" |
| 1991 | ** and "manifest.uuid" are modified if the --keep option is present. |
| 1992 | ** |
| 1993 | ** Options: |
| 1994 | ** --keep Only modify the manifest and manifest.uuid files |
| 1995 | ** --nested Allow opening a repository inside an opened checkout |
| 1996 | ** |
| 1997 | ** See also: close |
| 1998 | */ |
| 1999 | void cmd_open(void){ |
| 2000 | int keepFlag; |
| 2001 | int allowNested; |
| 2002 | char **oldArgv; |
| 2003 | int oldArgc; |
| 2004 | static char *azNewArgv[] = { 0, "checkout", "--prompt", 0, 0, 0 }; |
| 2005 | |
| 2006 | url_proxy_options(); |
| 2007 | keepFlag = find_option("keep",0,0)!=0; |
| 2008 | allowNested = find_option("nested",0,0)!=0; |
| 2009 | if( g.argc!=3 && g.argc!=4 ){ |
| 2010 | usage("REPOSITORY-FILENAME ?VERSION?"); |
| 2011 | } |
| @@ -2030,22 +2035,24 @@ | |
| 2030 | db_lset_int("checkout", 0); |
| 2031 | oldArgv = g.argv; |
| 2032 | oldArgc = g.argc; |
| 2033 | azNewArgv[0] = g.argv[0]; |
| 2034 | g.argv = azNewArgv; |
| 2035 | g.argc = 3; |
| 2036 | if( oldArgc==4 ){ |
| 2037 | azNewArgv[g.argc-1] = oldArgv[3]; |
| 2038 | }else if( !db_exists("SELECT 1 FROM event WHERE type='ci'") ){ |
| 2039 | azNewArgv[g.argc-1] = "--latest"; |
| 2040 | }else{ |
| 2041 | azNewArgv[g.argc-1] = db_get("main-branch", "trunk"); |
| 2042 | } |
| 2043 | if( keepFlag ){ |
| 2044 | azNewArgv[g.argc++] = "--keep"; |
| 2045 | } |
| 2046 | checkout_cmd(); |
| 2047 | g.argc = 2; |
| 2048 | info_cmd(); |
| 2049 | } |
| 2050 | |
| 2051 | /* |
| @@ -2101,66 +2108,68 @@ | |
| 2101 | */ |
| 2102 | #if INTERFACE |
| 2103 | struct stControlSettings { |
| 2104 | char const *name; /* Name of the setting */ |
| 2105 | char const *var; /* Internal variable name used by db_set() */ |
| 2106 | int width; /* Width of display. 0 for boolean values */ |
| 2107 | int versionable; /* Is this setting versionable? */ |
| 2108 | char const *def; /* Default value */ |
| 2109 | }; |
| 2110 | #endif /* INTERFACE */ |
| 2111 | struct stControlSettings const ctrlSettings[] = { |
| 2112 | { "access-log", 0, 0, 0, "off" }, |
| 2113 | { "allow-symlinks",0, 0, 1, "off" }, |
| 2114 | { "auto-captcha", "autocaptcha", 0, 0, "on" }, |
| 2115 | { "auto-hyperlink",0, 0, 0, "on", }, |
| 2116 | { "auto-shun", 0, 0, 0, "on" }, |
| 2117 | { "autosync", 0, 0, 0, "on" }, |
| 2118 | { "binary-glob", 0, 40, 1, "" }, |
| 2119 | { "clearsign", 0, 0, 0, "off" }, |
| 2120 | #if defined(_WIN32) || defined(__CYGWIN__) || defined(__DARWIN__) || defined(__APPLE__) |
| 2121 | { "case-sensitive",0, 0, 0, "off" }, |
| 2122 | #else |
| 2123 | { "case-sensitive",0, 0, 0, "on" }, |
| 2124 | #endif |
| 2125 | { "clean-glob", 0, 40, 1, "" }, |
| 2126 | { "crnl-glob", 0, 40, 1, "" }, |
| 2127 | { "default-perms", 0, 16, 0, "u" }, |
| 2128 | { "diff-binary", 0, 0, 0, "on" }, |
| 2129 | { "diff-command", 0, 40, 0, "" }, |
| 2130 | { "dont-push", 0, 0, 0, "off" }, |
| 2131 | { "editor", 0, 32, 0, "" }, |
| 2132 | { "empty-dirs", 0, 40, 1, "" }, |
| 2133 | { "encoding-glob", 0, 40, 1, "" }, |
| 2134 | { "gdiff-command", 0, 40, 0, "gdiff" }, |
| 2135 | { "gmerge-command",0, 40, 0, "" }, |
| 2136 | { "http-port", 0, 16, 0, "8080" }, |
| 2137 | { "https-login", 0, 0, 0, "off" }, |
| 2138 | { "ignore-glob", 0, 40, 1, "" }, |
| 2139 | { "keep-glob", 0, 40, 1, "" }, |
| 2140 | { "localauth", 0, 0, 0, "off" }, |
| 2141 | { "main-branch", 0, 40, 0, "trunk" }, |
| 2142 | { "manifest", 0, 0, 1, "off" }, |
| 2143 | { "max-upload", 0, 25, 0, "250000" }, |
| 2144 | { "mtime-changes", 0, 0, 0, "on" }, |
| 2145 | { "pgp-command", 0, 40, 0, "gpg --clearsign -o " }, |
| 2146 | { "proxy", 0, 32, 0, "off" }, |
| 2147 | { "relative-paths",0, 0, 0, "on" }, |
| 2148 | { "repo-cksum", 0, 0, 0, "on" }, |
| 2149 | { "self-register", 0, 0, 0, "off" }, |
| 2150 | { "ssh-command", 0, 40, 0, "" }, |
| 2151 | { "ssl-ca-location",0, 40, 0, "" }, |
| 2152 | { "ssl-identity", 0, 40, 0, "" }, |
| 2153 | #ifdef FOSSIL_ENABLE_TCL |
| 2154 | { "tcl", 0, 0, 0, "off" }, |
| 2155 | { "tcl-setup", 0, 40, 0, "" }, |
| 2156 | #endif |
| 2157 | { "th1-setup", 0, 40, 0, "" }, |
| 2158 | { "th1-uri-regexp",0, 40, 0, "" }, |
| 2159 | { "web-browser", 0, 32, 0, "" }, |
| 2160 | { "white-foreground", 0, 0, 0, "off" }, |
| 2161 | { 0,0,0,0,0 } |
| 2162 | }; |
| 2163 | |
| 2164 | /* |
| 2165 | ** COMMAND: settings |
| 2166 | ** COMMAND: unset* |
| 2167 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -715,11 +715,11 @@ | |
| 715 | */ |
| 716 | LOCAL sqlite3 *db_open(const char *zDbName){ |
| 717 | int rc; |
| 718 | sqlite3 *db; |
| 719 | |
| 720 | #if defined(__CYGWIN__) && !defined(USE_SYSTEM_SQLITE) |
| 721 | zDbName = fossil_utf8_to_filename(zDbName); |
| 722 | #endif |
| 723 | if( g.fSqlTrace ) fossil_trace("-- sqlite3_open: [%s]\n", zDbName); |
| 724 | rc = sqlite3_open_v2( |
| 725 | zDbName, &db, |
| @@ -1989,23 +1989,28 @@ | |
| 1989 | ** If VERSION is specified then that version is checked out. Otherwise |
| 1990 | ** the latest version is checked out. No files other than "manifest" |
| 1991 | ** and "manifest.uuid" are modified if the --keep option is present. |
| 1992 | ** |
| 1993 | ** Options: |
| 1994 | ** --empty Initialize checkout as being empty, but still connected |
| 1995 | ** with the local repository. If you commit this checkout, |
| 1996 | ** it will become a new "initial" commit in the repository. |
| 1997 | ** --keep Only modify the manifest and manifest.uuid files |
| 1998 | ** --nested Allow opening a repository inside an opened checkout |
| 1999 | ** |
| 2000 | ** See also: close |
| 2001 | */ |
| 2002 | void cmd_open(void){ |
| 2003 | int emptyFlag; |
| 2004 | int keepFlag; |
| 2005 | int allowNested; |
| 2006 | char **oldArgv; |
| 2007 | int oldArgc; |
| 2008 | static char *azNewArgv[] = { 0, "checkout", "--prompt", 0, 0, 0 }; |
| 2009 | |
| 2010 | url_proxy_options(); |
| 2011 | emptyFlag = find_option("empty",0,0)!=0; |
| 2012 | keepFlag = find_option("keep",0,0)!=0; |
| 2013 | allowNested = find_option("nested",0,0)!=0; |
| 2014 | if( g.argc!=3 && g.argc!=4 ){ |
| 2015 | usage("REPOSITORY-FILENAME ?VERSION?"); |
| 2016 | } |
| @@ -2030,22 +2035,24 @@ | |
| 2035 | db_lset_int("checkout", 0); |
| 2036 | oldArgv = g.argv; |
| 2037 | oldArgc = g.argc; |
| 2038 | azNewArgv[0] = g.argv[0]; |
| 2039 | g.argv = azNewArgv; |
| 2040 | if( !emptyFlag){ |
| 2041 | g.argc = 3; |
| 2042 | if( oldArgc==4 ){ |
| 2043 | azNewArgv[g.argc-1] = oldArgv[3]; |
| 2044 | }else if( !db_exists("SELECT 1 FROM event WHERE type='ci'") ){ |
| 2045 | azNewArgv[g.argc-1] = "--latest"; |
| 2046 | }else{ |
| 2047 | azNewArgv[g.argc-1] = db_get("main-branch", "trunk"); |
| 2048 | } |
| 2049 | if( keepFlag ){ |
| 2050 | azNewArgv[g.argc++] = "--keep"; |
| 2051 | } |
| 2052 | checkout_cmd(); |
| 2053 | } |
| 2054 | g.argc = 2; |
| 2055 | info_cmd(); |
| 2056 | } |
| 2057 | |
| 2058 | /* |
| @@ -2101,66 +2108,68 @@ | |
| 2108 | */ |
| 2109 | #if INTERFACE |
| 2110 | struct stControlSettings { |
| 2111 | char const *name; /* Name of the setting */ |
| 2112 | char const *var; /* Internal variable name used by db_set() */ |
| 2113 | int width; /* Width of display. 0 for boolean values. */ |
| 2114 | int versionable; /* Is this setting versionable? */ |
| 2115 | int forceTextArea; /* Force using a text area for display? */ |
| 2116 | char const *def; /* Default value */ |
| 2117 | }; |
| 2118 | #endif /* INTERFACE */ |
| 2119 | struct stControlSettings const ctrlSettings[] = { |
| 2120 | { "access-log", 0, 0, 0, 0, "off" }, |
| 2121 | { "allow-symlinks", 0, 0, 1, 0, "off" }, |
| 2122 | { "auto-captcha", "autocaptcha", 0, 0, 0, "on" }, |
| 2123 | { "auto-hyperlink", 0, 0, 0, 0, "on", }, |
| 2124 | { "auto-shun", 0, 0, 0, 0, "on" }, |
| 2125 | { "autosync", 0, 0, 0, 0, "on" }, |
| 2126 | { "binary-glob", 0, 40, 1, 0, "" }, |
| 2127 | { "clearsign", 0, 0, 0, 0, "off" }, |
| 2128 | #if defined(_WIN32) || defined(__CYGWIN__) || defined(__DARWIN__) || \ |
| 2129 | defined(__APPLE__) |
| 2130 | { "case-sensitive", 0, 0, 0, 0, "off" }, |
| 2131 | #else |
| 2132 | { "case-sensitive", 0, 0, 0, 0, "on" }, |
| 2133 | #endif |
| 2134 | { "clean-glob", 0, 40, 1, 0, "" }, |
| 2135 | { "crnl-glob", 0, 40, 1, 0, "" }, |
| 2136 | { "default-perms", 0, 16, 0, 0, "u" }, |
| 2137 | { "diff-binary", 0, 0, 0, 0, "on" }, |
| 2138 | { "diff-command", 0, 40, 0, 0, "" }, |
| 2139 | { "dont-push", 0, 0, 0, 0, "off" }, |
| 2140 | { "editor", 0, 32, 0, 0, "" }, |
| 2141 | { "empty-dirs", 0, 40, 1, 0, "" }, |
| 2142 | { "encoding-glob", 0, 40, 1, 0, "" }, |
| 2143 | { "gdiff-command", 0, 40, 0, 0, "gdiff" }, |
| 2144 | { "gmerge-command", 0, 40, 0, 0, "" }, |
| 2145 | { "http-port", 0, 16, 0, 0, "8080" }, |
| 2146 | { "https-login", 0, 0, 0, 0, "off" }, |
| 2147 | { "ignore-glob", 0, 40, 1, 0, "" }, |
| 2148 | { "keep-glob", 0, 40, 1, 0, "" }, |
| 2149 | { "localauth", 0, 0, 0, 0, "off" }, |
| 2150 | { "main-branch", 0, 40, 0, 0, "trunk" }, |
| 2151 | { "manifest", 0, 0, 1, 0, "off" }, |
| 2152 | { "max-upload", 0, 25, 0, 0, "250000" }, |
| 2153 | { "mtime-changes", 0, 0, 0, 0, "on" }, |
| 2154 | { "pgp-command", 0, 40, 0, 0, "gpg --clearsign -o " }, |
| 2155 | { "proxy", 0, 32, 0, 0, "off" }, |
| 2156 | { "relative-paths", 0, 0, 0, 0, "on" }, |
| 2157 | { "repo-cksum", 0, 0, 0, 0, "on" }, |
| 2158 | { "self-register", 0, 0, 0, 0, "off" }, |
| 2159 | { "ssh-command", 0, 40, 0, 0, "" }, |
| 2160 | { "ssl-ca-location", 0, 40, 0, 0, "" }, |
| 2161 | { "ssl-identity", 0, 40, 0, 0, "" }, |
| 2162 | #ifdef FOSSIL_ENABLE_TCL |
| 2163 | { "tcl", 0, 0, 0, 0, "off" }, |
| 2164 | { "tcl-setup", 0, 40, 0, 1, "" }, |
| 2165 | #endif |
| 2166 | { "th1-setup", 0, 40, 0, 1, "" }, |
| 2167 | { "th1-uri-regexp", 0, 40, 0, 0, "" }, |
| 2168 | { "web-browser", 0, 32, 0, 0, "" }, |
| 2169 | { "white-foreground", 0, 0, 0, 0, "off" }, |
| 2170 | { 0,0,0,0,0,0 } |
| 2171 | }; |
| 2172 | |
| 2173 | /* |
| 2174 | ** COMMAND: settings |
| 2175 | ** COMMAND: unset* |
| 2176 |
+7
-2
| --- src/rebuild.c | ||
| +++ src/rebuild.c | ||
| @@ -793,11 +793,10 @@ | ||
| 793 | 793 | db_close(1); |
| 794 | 794 | db_open_repository(g.zRepositoryName); |
| 795 | 795 | if( !bForce ){ |
| 796 | 796 | Blob ans; |
| 797 | 797 | char cReply; |
| 798 | - blob_zero(&ans); | |
| 799 | 798 | prompt_user( |
| 800 | 799 | "Scrubbing the repository will permanently delete information.\n" |
| 801 | 800 | "Changes cannot be undone. Continue (y/N)? ", &ans); |
| 802 | 801 | cReply = blob_str(&ans)[0]; |
| 803 | 802 | if( cReply!='y' && cReply!='Y' ){ |
| @@ -859,11 +858,17 @@ | ||
| 859 | 858 | continue; |
| 860 | 859 | } |
| 861 | 860 | zUtf8Name = fossil_filename_to_utf8(pEntry->d_name); |
| 862 | 861 | zSubpath = mprintf("%s/%s", zPath, zUtf8Name); |
| 863 | 862 | fossil_filename_free(zUtf8Name); |
| 864 | - if( file_isdir(zSubpath)==1 ){ | |
| 863 | +#ifdef _DIRENT_HAVE_D_TYPE | |
| 864 | + if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) | |
| 865 | + ? (file_isdir(zSubpath)==1) : (pEntry->d_type==DT_DIR) ) | |
| 866 | +#else | |
| 867 | + if( file_isdir(zSubpath)==1 ) | |
| 868 | +#endif | |
| 869 | + { | |
| 865 | 870 | recon_read_dir(zSubpath); |
| 866 | 871 | }else{ |
| 867 | 872 | blob_init(&path, 0, 0); |
| 868 | 873 | blob_appendf(&path, "%s", zSubpath); |
| 869 | 874 | if( blob_read_from_file(&aContent, blob_str(&path))==-1 ){ |
| 870 | 875 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -793,11 +793,10 @@ | |
| 793 | db_close(1); |
| 794 | db_open_repository(g.zRepositoryName); |
| 795 | if( !bForce ){ |
| 796 | Blob ans; |
| 797 | char cReply; |
| 798 | blob_zero(&ans); |
| 799 | prompt_user( |
| 800 | "Scrubbing the repository will permanently delete information.\n" |
| 801 | "Changes cannot be undone. Continue (y/N)? ", &ans); |
| 802 | cReply = blob_str(&ans)[0]; |
| 803 | if( cReply!='y' && cReply!='Y' ){ |
| @@ -859,11 +858,17 @@ | |
| 859 | continue; |
| 860 | } |
| 861 | zUtf8Name = fossil_filename_to_utf8(pEntry->d_name); |
| 862 | zSubpath = mprintf("%s/%s", zPath, zUtf8Name); |
| 863 | fossil_filename_free(zUtf8Name); |
| 864 | if( file_isdir(zSubpath)==1 ){ |
| 865 | recon_read_dir(zSubpath); |
| 866 | }else{ |
| 867 | blob_init(&path, 0, 0); |
| 868 | blob_appendf(&path, "%s", zSubpath); |
| 869 | if( blob_read_from_file(&aContent, blob_str(&path))==-1 ){ |
| 870 |
| --- src/rebuild.c | |
| +++ src/rebuild.c | |
| @@ -793,11 +793,10 @@ | |
| 793 | db_close(1); |
| 794 | db_open_repository(g.zRepositoryName); |
| 795 | if( !bForce ){ |
| 796 | Blob ans; |
| 797 | char cReply; |
| 798 | prompt_user( |
| 799 | "Scrubbing the repository will permanently delete information.\n" |
| 800 | "Changes cannot be undone. Continue (y/N)? ", &ans); |
| 801 | cReply = blob_str(&ans)[0]; |
| 802 | if( cReply!='y' && cReply!='Y' ){ |
| @@ -859,11 +858,17 @@ | |
| 858 | continue; |
| 859 | } |
| 860 | zUtf8Name = fossil_filename_to_utf8(pEntry->d_name); |
| 861 | zSubpath = mprintf("%s/%s", zPath, zUtf8Name); |
| 862 | fossil_filename_free(zUtf8Name); |
| 863 | #ifdef _DIRENT_HAVE_D_TYPE |
| 864 | if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) |
| 865 | ? (file_isdir(zSubpath)==1) : (pEntry->d_type==DT_DIR) ) |
| 866 | #else |
| 867 | if( file_isdir(zSubpath)==1 ) |
| 868 | #endif |
| 869 | { |
| 870 | recon_read_dir(zSubpath); |
| 871 | }else{ |
| 872 | blob_init(&path, 0, 0); |
| 873 | blob_appendf(&path, "%s", zSubpath); |
| 874 | if( blob_read_from_file(&aContent, blob_str(&path))==-1 ){ |
| 875 |
+14
-5
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -1261,32 +1261,41 @@ | ||
| 1261 | 1261 | } else { |
| 1262 | 1262 | @ <br /> |
| 1263 | 1263 | } |
| 1264 | 1264 | } |
| 1265 | 1265 | } |
| 1266 | + @ <br /><input type="submit" name="submit" value="Apply Changes" /> | |
| 1266 | 1267 | @ </td><td style="width:50px;"></td><td valign="top"> |
| 1267 | 1268 | for(pSet=ctrlSettings; pSet->name!=0; pSet++){ |
| 1268 | - if( pSet->width!=0 && !pSet->versionable){ | |
| 1269 | + if( pSet->width!=0 && !pSet->versionable && !pSet->forceTextArea ){ | |
| 1269 | 1270 | entry_attribute(pSet->name, /*pSet->width*/ 25, pSet->name, |
| 1270 | 1271 | pSet->var!=0 ? pSet->var : pSet->name, |
| 1271 | 1272 | (char*)pSet->def, 0); |
| 1272 | 1273 | @ <br /> |
| 1273 | 1274 | } |
| 1275 | + } | |
| 1276 | + for(pSet=ctrlSettings; pSet->name!=0; pSet++){ | |
| 1277 | + if( pSet->width!=0 && !pSet->versionable && pSet->forceTextArea ){ | |
| 1278 | + @<b>%s(pSet->name)</b><br /> | |
| 1279 | + textarea_attribute("", /*rows*/ 3, /*cols*/ 50, pSet->name, | |
| 1280 | + pSet->var!=0 ? pSet->var : pSet->name, | |
| 1281 | + (char*)pSet->def, 0); | |
| 1282 | + @ <br /> | |
| 1283 | + } | |
| 1274 | 1284 | } |
| 1275 | 1285 | @ </td><td style="width:50px;"></td><td valign="top"> |
| 1276 | 1286 | for(pSet=ctrlSettings; pSet->name!=0; pSet++){ |
| 1277 | - int hasVersionableValue = db_get_do_versionable(pSet->name, NULL)!=0; | |
| 1278 | - if( pSet->width!=0 && pSet->versionable){ | |
| 1287 | + if( pSet->width!=0 && pSet->versionable ){ | |
| 1288 | + int hasVersionableValue = db_get_do_versionable(pSet->name, NULL)!=0; | |
| 1279 | 1289 | @<b>%s(pSet->name)</b> (v)<br /> |
| 1280 | 1290 | textarea_attribute("", /*rows*/ 3, /*cols*/ 20, pSet->name, |
| 1281 | 1291 | pSet->var!=0 ? pSet->var : pSet->name, |
| 1282 | 1292 | (char*)pSet->def, hasVersionableValue); |
| 1283 | 1293 | @<br /> |
| 1284 | 1294 | } |
| 1285 | 1295 | } |
| 1286 | 1296 | @ </td></tr></table> |
| 1287 | - @ <p><input type="submit" name="submit" value="Apply Changes" /></p> | |
| 1288 | 1297 | @ </div></form> |
| 1289 | 1298 | @ <p>Settings marked with (v) are 'versionable' and will be overridden |
| 1290 | 1299 | @ by the contents of files named <tt>.fossil-settings/PROPERTY</tt>. |
| 1291 | 1300 | @ If such a file is present, the corresponding field above is not |
| 1292 | 1301 | @ editable.</p><hr /><p> |
| @@ -1469,11 +1478,11 @@ | ||
| 1469 | 1478 | @ </div></form> |
| 1470 | 1479 | @ <hr /> |
| 1471 | 1480 | @ The default header is shown below for reference. Other examples |
| 1472 | 1481 | @ of headers can be seen on the <a href="setup_skin">skins page</a>. |
| 1473 | 1482 | @ See also the <a href="setup_editcss">CSS</a> and |
| 1474 | - @ <a href="setup_footer">footer</a> editing screeens. | |
| 1483 | + @ <a href="setup_footer">footer</a> editing screens. | |
| 1475 | 1484 | @ <blockquote><pre> |
| 1476 | 1485 | @ %h(zDefaultHeader) |
| 1477 | 1486 | @ </pre></blockquote> |
| 1478 | 1487 | style_footer(); |
| 1479 | 1488 | db_end_transaction(0); |
| 1480 | 1489 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -1261,32 +1261,41 @@ | |
| 1261 | } else { |
| 1262 | @ <br /> |
| 1263 | } |
| 1264 | } |
| 1265 | } |
| 1266 | @ </td><td style="width:50px;"></td><td valign="top"> |
| 1267 | for(pSet=ctrlSettings; pSet->name!=0; pSet++){ |
| 1268 | if( pSet->width!=0 && !pSet->versionable){ |
| 1269 | entry_attribute(pSet->name, /*pSet->width*/ 25, pSet->name, |
| 1270 | pSet->var!=0 ? pSet->var : pSet->name, |
| 1271 | (char*)pSet->def, 0); |
| 1272 | @ <br /> |
| 1273 | } |
| 1274 | } |
| 1275 | @ </td><td style="width:50px;"></td><td valign="top"> |
| 1276 | for(pSet=ctrlSettings; pSet->name!=0; pSet++){ |
| 1277 | int hasVersionableValue = db_get_do_versionable(pSet->name, NULL)!=0; |
| 1278 | if( pSet->width!=0 && pSet->versionable){ |
| 1279 | @<b>%s(pSet->name)</b> (v)<br /> |
| 1280 | textarea_attribute("", /*rows*/ 3, /*cols*/ 20, pSet->name, |
| 1281 | pSet->var!=0 ? pSet->var : pSet->name, |
| 1282 | (char*)pSet->def, hasVersionableValue); |
| 1283 | @<br /> |
| 1284 | } |
| 1285 | } |
| 1286 | @ </td></tr></table> |
| 1287 | @ <p><input type="submit" name="submit" value="Apply Changes" /></p> |
| 1288 | @ </div></form> |
| 1289 | @ <p>Settings marked with (v) are 'versionable' and will be overridden |
| 1290 | @ by the contents of files named <tt>.fossil-settings/PROPERTY</tt>. |
| 1291 | @ If such a file is present, the corresponding field above is not |
| 1292 | @ editable.</p><hr /><p> |
| @@ -1469,11 +1478,11 @@ | |
| 1469 | @ </div></form> |
| 1470 | @ <hr /> |
| 1471 | @ The default header is shown below for reference. Other examples |
| 1472 | @ of headers can be seen on the <a href="setup_skin">skins page</a>. |
| 1473 | @ See also the <a href="setup_editcss">CSS</a> and |
| 1474 | @ <a href="setup_footer">footer</a> editing screeens. |
| 1475 | @ <blockquote><pre> |
| 1476 | @ %h(zDefaultHeader) |
| 1477 | @ </pre></blockquote> |
| 1478 | style_footer(); |
| 1479 | db_end_transaction(0); |
| 1480 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -1261,32 +1261,41 @@ | |
| 1261 | } else { |
| 1262 | @ <br /> |
| 1263 | } |
| 1264 | } |
| 1265 | } |
| 1266 | @ <br /><input type="submit" name="submit" value="Apply Changes" /> |
| 1267 | @ </td><td style="width:50px;"></td><td valign="top"> |
| 1268 | for(pSet=ctrlSettings; pSet->name!=0; pSet++){ |
| 1269 | if( pSet->width!=0 && !pSet->versionable && !pSet->forceTextArea ){ |
| 1270 | entry_attribute(pSet->name, /*pSet->width*/ 25, pSet->name, |
| 1271 | pSet->var!=0 ? pSet->var : pSet->name, |
| 1272 | (char*)pSet->def, 0); |
| 1273 | @ <br /> |
| 1274 | } |
| 1275 | } |
| 1276 | for(pSet=ctrlSettings; pSet->name!=0; pSet++){ |
| 1277 | if( pSet->width!=0 && !pSet->versionable && pSet->forceTextArea ){ |
| 1278 | @<b>%s(pSet->name)</b><br /> |
| 1279 | textarea_attribute("", /*rows*/ 3, /*cols*/ 50, pSet->name, |
| 1280 | pSet->var!=0 ? pSet->var : pSet->name, |
| 1281 | (char*)pSet->def, 0); |
| 1282 | @ <br /> |
| 1283 | } |
| 1284 | } |
| 1285 | @ </td><td style="width:50px;"></td><td valign="top"> |
| 1286 | for(pSet=ctrlSettings; pSet->name!=0; pSet++){ |
| 1287 | if( pSet->width!=0 && pSet->versionable ){ |
| 1288 | int hasVersionableValue = db_get_do_versionable(pSet->name, NULL)!=0; |
| 1289 | @<b>%s(pSet->name)</b> (v)<br /> |
| 1290 | textarea_attribute("", /*rows*/ 3, /*cols*/ 20, pSet->name, |
| 1291 | pSet->var!=0 ? pSet->var : pSet->name, |
| 1292 | (char*)pSet->def, hasVersionableValue); |
| 1293 | @<br /> |
| 1294 | } |
| 1295 | } |
| 1296 | @ </td></tr></table> |
| 1297 | @ </div></form> |
| 1298 | @ <p>Settings marked with (v) are 'versionable' and will be overridden |
| 1299 | @ by the contents of files named <tt>.fossil-settings/PROPERTY</tt>. |
| 1300 | @ If such a file is present, the corresponding field above is not |
| 1301 | @ editable.</p><hr /><p> |
| @@ -1469,11 +1478,11 @@ | |
| 1478 | @ </div></form> |
| 1479 | @ <hr /> |
| 1480 | @ The default header is shown below for reference. Other examples |
| 1481 | @ of headers can be seen on the <a href="setup_skin">skins page</a>. |
| 1482 | @ See also the <a href="setup_editcss">CSS</a> and |
| 1483 | @ <a href="setup_footer">footer</a> editing screens. |
| 1484 | @ <blockquote><pre> |
| 1485 | @ %h(zDefaultHeader) |
| 1486 | @ </pre></blockquote> |
| 1487 | style_footer(); |
| 1488 | db_end_transaction(0); |
| 1489 |
+55
-70
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -23,10 +23,64 @@ | ||
| 23 | 23 | # define SQLITE_PRIVATE static |
| 24 | 24 | #endif |
| 25 | 25 | #ifndef SQLITE_API |
| 26 | 26 | # define SQLITE_API |
| 27 | 27 | #endif |
| 28 | +/************** Begin file sqliteInt.h ***************************************/ | |
| 29 | +/* | |
| 30 | +** 2001 September 15 | |
| 31 | +** | |
| 32 | +** The author disclaims copyright to this source code. In place of | |
| 33 | +** a legal notice, here is a blessing: | |
| 34 | +** | |
| 35 | +** May you do good and not evil. | |
| 36 | +** May you find forgiveness for yourself and forgive others. | |
| 37 | +** May you share freely, never taking more than you give. | |
| 38 | +** | |
| 39 | +************************************************************************* | |
| 40 | +** Internal interface definitions for SQLite. | |
| 41 | +** | |
| 42 | +*/ | |
| 43 | +#ifndef _SQLITEINT_H_ | |
| 44 | +#define _SQLITEINT_H_ | |
| 45 | + | |
| 46 | +/* | |
| 47 | +** These #defines should enable >2GB file support on POSIX if the | |
| 48 | +** underlying operating system supports it. If the OS lacks | |
| 49 | +** large file support, or if the OS is windows, these should be no-ops. | |
| 50 | +** | |
| 51 | +** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any | |
| 52 | +** system #includes. Hence, this block of code must be the very first | |
| 53 | +** code in all source files. | |
| 54 | +** | |
| 55 | +** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | |
| 56 | +** on the compiler command line. This is necessary if you are compiling | |
| 57 | +** on a recent machine (ex: Red Hat 7.2) but you want your code to work | |
| 58 | +** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 | |
| 59 | +** without this option, LFS is enable. But LFS does not exist in the kernel | |
| 60 | +** in Red Hat 6.0, so the code won't work. Hence, for maximum binary | |
| 61 | +** portability you should omit LFS. | |
| 62 | +** | |
| 63 | +** The previous paragraph was written in 2005. (This paragraph is written | |
| 64 | +** on 2008-11-28.) These days, all Linux kernels support large files, so | |
| 65 | +** you should probably leave LFS enabled. But some embedded platforms might | |
| 66 | +** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. | |
| 67 | +** | |
| 68 | +** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. | |
| 69 | +*/ | |
| 70 | +#ifndef SQLITE_DISABLE_LFS | |
| 71 | +# define _LARGE_FILE 1 | |
| 72 | +# ifndef _FILE_OFFSET_BITS | |
| 73 | +# define _FILE_OFFSET_BITS 64 | |
| 74 | +# endif | |
| 75 | +# define _LARGEFILE_SOURCE 1 | |
| 76 | +#endif | |
| 77 | + | |
| 78 | +/* The public SQLite interface. The _FILE_OFFSET_BITS macro must appear | |
| 79 | +** first in QNX. | |
| 80 | +*/ | |
| 81 | +/************** Include sqlite3.h in the middle of sqliteInt.h ***************/ | |
| 28 | 82 | /************** Begin file sqlite3.h *****************************************/ |
| 29 | 83 | /* |
| 30 | 84 | ** 2001 September 15 |
| 31 | 85 | ** |
| 32 | 86 | ** The author disclaims copyright to this source code. In place of |
| @@ -7411,54 +7465,11 @@ | ||
| 7411 | 7465 | |
| 7412 | 7466 | #endif /* ifndef _SQLITE3RTREE_H_ */ |
| 7413 | 7467 | |
| 7414 | 7468 | |
| 7415 | 7469 | /************** End of sqlite3.h *********************************************/ |
| 7416 | -/************** Begin file sqliteInt.h ***************************************/ | |
| 7417 | -/* | |
| 7418 | -** 2001 September 15 | |
| 7419 | -** | |
| 7420 | -** The author disclaims copyright to this source code. In place of | |
| 7421 | -** a legal notice, here is a blessing: | |
| 7422 | -** | |
| 7423 | -** May you do good and not evil. | |
| 7424 | -** May you find forgiveness for yourself and forgive others. | |
| 7425 | -** May you share freely, never taking more than you give. | |
| 7426 | -** | |
| 7427 | -************************************************************************* | |
| 7428 | -** Internal interface definitions for SQLite. | |
| 7429 | -** | |
| 7430 | -*/ | |
| 7431 | -#ifndef _SQLITEINT_H_ | |
| 7432 | -#define _SQLITEINT_H_ | |
| 7433 | - | |
| 7434 | -/* | |
| 7435 | -** These #defines should enable >2GB file support on POSIX if the | |
| 7436 | -** underlying operating system supports it. If the OS lacks | |
| 7437 | -** large file support, or if the OS is windows, these should be no-ops. | |
| 7438 | -** | |
| 7439 | -** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any | |
| 7440 | -** system #includes. Hence, this block of code must be the very first | |
| 7441 | -** code in all source files. | |
| 7442 | -** | |
| 7443 | -** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | |
| 7444 | -** on the compiler command line. This is necessary if you are compiling | |
| 7445 | -** on a recent machine (ex: Red Hat 7.2) but you want your code to work | |
| 7446 | -** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 | |
| 7447 | -** without this option, LFS is enable. But LFS does not exist in the kernel | |
| 7448 | -** in Red Hat 6.0, so the code won't work. Hence, for maximum binary | |
| 7449 | -** portability you should omit LFS. | |
| 7450 | -** | |
| 7451 | -** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. | |
| 7452 | -*/ | |
| 7453 | -#ifndef SQLITE_DISABLE_LFS | |
| 7454 | -# define _LARGE_FILE 1 | |
| 7455 | -# ifndef _FILE_OFFSET_BITS | |
| 7456 | -# define _FILE_OFFSET_BITS 64 | |
| 7457 | -# endif | |
| 7458 | -# define _LARGEFILE_SOURCE 1 | |
| 7459 | -#endif | |
| 7470 | +/************** Continuing where we left off in sqliteInt.h ******************/ | |
| 7460 | 7471 | |
| 7461 | 7472 | /* |
| 7462 | 7473 | ** For MinGW, check to see if we can include the header file containing its |
| 7463 | 7474 | ** version information, among other things. Normally, this internal MinGW |
| 7464 | 7475 | ** header file would [only] be included automatically by other MinGW header |
| @@ -23462,36 +23473,10 @@ | ||
| 23462 | 23473 | # else |
| 23463 | 23474 | # define OS_VXWORKS 0 |
| 23464 | 23475 | # endif |
| 23465 | 23476 | #endif |
| 23466 | 23477 | |
| 23467 | -/* | |
| 23468 | -** These #defines should enable >2GB file support on Posix if the | |
| 23469 | -** underlying operating system supports it. If the OS lacks | |
| 23470 | -** large file support, these should be no-ops. | |
| 23471 | -** | |
| 23472 | -** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | |
| 23473 | -** on the compiler command line. This is necessary if you are compiling | |
| 23474 | -** on a recent machine (ex: RedHat 7.2) but you want your code to work | |
| 23475 | -** on an older machine (ex: RedHat 6.0). If you compile on RedHat 7.2 | |
| 23476 | -** without this option, LFS is enable. But LFS does not exist in the kernel | |
| 23477 | -** in RedHat 6.0, so the code won't work. Hence, for maximum binary | |
| 23478 | -** portability you should omit LFS. | |
| 23479 | -** | |
| 23480 | -** The previous paragraph was written in 2005. (This paragraph is written | |
| 23481 | -** on 2008-11-28.) These days, all Linux kernels support large files, so | |
| 23482 | -** you should probably leave LFS enabled. But some embedded platforms might | |
| 23483 | -** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. | |
| 23484 | -*/ | |
| 23485 | -#ifndef SQLITE_DISABLE_LFS | |
| 23486 | -# define _LARGE_FILE 1 | |
| 23487 | -# ifndef _FILE_OFFSET_BITS | |
| 23488 | -# define _FILE_OFFSET_BITS 64 | |
| 23489 | -# endif | |
| 23490 | -# define _LARGEFILE_SOURCE 1 | |
| 23491 | -#endif | |
| 23492 | - | |
| 23493 | 23478 | /* |
| 23494 | 23479 | ** standard include files. |
| 23495 | 23480 | */ |
| 23496 | 23481 | #include <sys/types.h> |
| 23497 | 23482 | #include <sys/stat.h> |
| 23498 | 23483 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -23,10 +23,64 @@ | |
| 23 | # define SQLITE_PRIVATE static |
| 24 | #endif |
| 25 | #ifndef SQLITE_API |
| 26 | # define SQLITE_API |
| 27 | #endif |
| 28 | /************** Begin file sqlite3.h *****************************************/ |
| 29 | /* |
| 30 | ** 2001 September 15 |
| 31 | ** |
| 32 | ** The author disclaims copyright to this source code. In place of |
| @@ -7411,54 +7465,11 @@ | |
| 7411 | |
| 7412 | #endif /* ifndef _SQLITE3RTREE_H_ */ |
| 7413 | |
| 7414 | |
| 7415 | /************** End of sqlite3.h *********************************************/ |
| 7416 | /************** Begin file sqliteInt.h ***************************************/ |
| 7417 | /* |
| 7418 | ** 2001 September 15 |
| 7419 | ** |
| 7420 | ** The author disclaims copyright to this source code. In place of |
| 7421 | ** a legal notice, here is a blessing: |
| 7422 | ** |
| 7423 | ** May you do good and not evil. |
| 7424 | ** May you find forgiveness for yourself and forgive others. |
| 7425 | ** May you share freely, never taking more than you give. |
| 7426 | ** |
| 7427 | ************************************************************************* |
| 7428 | ** Internal interface definitions for SQLite. |
| 7429 | ** |
| 7430 | */ |
| 7431 | #ifndef _SQLITEINT_H_ |
| 7432 | #define _SQLITEINT_H_ |
| 7433 | |
| 7434 | /* |
| 7435 | ** These #defines should enable >2GB file support on POSIX if the |
| 7436 | ** underlying operating system supports it. If the OS lacks |
| 7437 | ** large file support, or if the OS is windows, these should be no-ops. |
| 7438 | ** |
| 7439 | ** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any |
| 7440 | ** system #includes. Hence, this block of code must be the very first |
| 7441 | ** code in all source files. |
| 7442 | ** |
| 7443 | ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch |
| 7444 | ** on the compiler command line. This is necessary if you are compiling |
| 7445 | ** on a recent machine (ex: Red Hat 7.2) but you want your code to work |
| 7446 | ** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 |
| 7447 | ** without this option, LFS is enable. But LFS does not exist in the kernel |
| 7448 | ** in Red Hat 6.0, so the code won't work. Hence, for maximum binary |
| 7449 | ** portability you should omit LFS. |
| 7450 | ** |
| 7451 | ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. |
| 7452 | */ |
| 7453 | #ifndef SQLITE_DISABLE_LFS |
| 7454 | # define _LARGE_FILE 1 |
| 7455 | # ifndef _FILE_OFFSET_BITS |
| 7456 | # define _FILE_OFFSET_BITS 64 |
| 7457 | # endif |
| 7458 | # define _LARGEFILE_SOURCE 1 |
| 7459 | #endif |
| 7460 | |
| 7461 | /* |
| 7462 | ** For MinGW, check to see if we can include the header file containing its |
| 7463 | ** version information, among other things. Normally, this internal MinGW |
| 7464 | ** header file would [only] be included automatically by other MinGW header |
| @@ -23462,36 +23473,10 @@ | |
| 23462 | # else |
| 23463 | # define OS_VXWORKS 0 |
| 23464 | # endif |
| 23465 | #endif |
| 23466 | |
| 23467 | /* |
| 23468 | ** These #defines should enable >2GB file support on Posix if the |
| 23469 | ** underlying operating system supports it. If the OS lacks |
| 23470 | ** large file support, these should be no-ops. |
| 23471 | ** |
| 23472 | ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch |
| 23473 | ** on the compiler command line. This is necessary if you are compiling |
| 23474 | ** on a recent machine (ex: RedHat 7.2) but you want your code to work |
| 23475 | ** on an older machine (ex: RedHat 6.0). If you compile on RedHat 7.2 |
| 23476 | ** without this option, LFS is enable. But LFS does not exist in the kernel |
| 23477 | ** in RedHat 6.0, so the code won't work. Hence, for maximum binary |
| 23478 | ** portability you should omit LFS. |
| 23479 | ** |
| 23480 | ** The previous paragraph was written in 2005. (This paragraph is written |
| 23481 | ** on 2008-11-28.) These days, all Linux kernels support large files, so |
| 23482 | ** you should probably leave LFS enabled. But some embedded platforms might |
| 23483 | ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. |
| 23484 | */ |
| 23485 | #ifndef SQLITE_DISABLE_LFS |
| 23486 | # define _LARGE_FILE 1 |
| 23487 | # ifndef _FILE_OFFSET_BITS |
| 23488 | # define _FILE_OFFSET_BITS 64 |
| 23489 | # endif |
| 23490 | # define _LARGEFILE_SOURCE 1 |
| 23491 | #endif |
| 23492 | |
| 23493 | /* |
| 23494 | ** standard include files. |
| 23495 | */ |
| 23496 | #include <sys/types.h> |
| 23497 | #include <sys/stat.h> |
| 23498 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -23,10 +23,64 @@ | |
| 23 | # define SQLITE_PRIVATE static |
| 24 | #endif |
| 25 | #ifndef SQLITE_API |
| 26 | # define SQLITE_API |
| 27 | #endif |
| 28 | /************** Begin file sqliteInt.h ***************************************/ |
| 29 | /* |
| 30 | ** 2001 September 15 |
| 31 | ** |
| 32 | ** The author disclaims copyright to this source code. In place of |
| 33 | ** a legal notice, here is a blessing: |
| 34 | ** |
| 35 | ** May you do good and not evil. |
| 36 | ** May you find forgiveness for yourself and forgive others. |
| 37 | ** May you share freely, never taking more than you give. |
| 38 | ** |
| 39 | ************************************************************************* |
| 40 | ** Internal interface definitions for SQLite. |
| 41 | ** |
| 42 | */ |
| 43 | #ifndef _SQLITEINT_H_ |
| 44 | #define _SQLITEINT_H_ |
| 45 | |
| 46 | /* |
| 47 | ** These #defines should enable >2GB file support on POSIX if the |
| 48 | ** underlying operating system supports it. If the OS lacks |
| 49 | ** large file support, or if the OS is windows, these should be no-ops. |
| 50 | ** |
| 51 | ** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any |
| 52 | ** system #includes. Hence, this block of code must be the very first |
| 53 | ** code in all source files. |
| 54 | ** |
| 55 | ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch |
| 56 | ** on the compiler command line. This is necessary if you are compiling |
| 57 | ** on a recent machine (ex: Red Hat 7.2) but you want your code to work |
| 58 | ** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 |
| 59 | ** without this option, LFS is enable. But LFS does not exist in the kernel |
| 60 | ** in Red Hat 6.0, so the code won't work. Hence, for maximum binary |
| 61 | ** portability you should omit LFS. |
| 62 | ** |
| 63 | ** The previous paragraph was written in 2005. (This paragraph is written |
| 64 | ** on 2008-11-28.) These days, all Linux kernels support large files, so |
| 65 | ** you should probably leave LFS enabled. But some embedded platforms might |
| 66 | ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. |
| 67 | ** |
| 68 | ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. |
| 69 | */ |
| 70 | #ifndef SQLITE_DISABLE_LFS |
| 71 | # define _LARGE_FILE 1 |
| 72 | # ifndef _FILE_OFFSET_BITS |
| 73 | # define _FILE_OFFSET_BITS 64 |
| 74 | # endif |
| 75 | # define _LARGEFILE_SOURCE 1 |
| 76 | #endif |
| 77 | |
| 78 | /* The public SQLite interface. The _FILE_OFFSET_BITS macro must appear |
| 79 | ** first in QNX. |
| 80 | */ |
| 81 | /************** Include sqlite3.h in the middle of sqliteInt.h ***************/ |
| 82 | /************** Begin file sqlite3.h *****************************************/ |
| 83 | /* |
| 84 | ** 2001 September 15 |
| 85 | ** |
| 86 | ** The author disclaims copyright to this source code. In place of |
| @@ -7411,54 +7465,11 @@ | |
| 7465 | |
| 7466 | #endif /* ifndef _SQLITE3RTREE_H_ */ |
| 7467 | |
| 7468 | |
| 7469 | /************** End of sqlite3.h *********************************************/ |
| 7470 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 7471 | |
| 7472 | /* |
| 7473 | ** For MinGW, check to see if we can include the header file containing its |
| 7474 | ** version information, among other things. Normally, this internal MinGW |
| 7475 | ** header file would [only] be included automatically by other MinGW header |
| @@ -23462,36 +23473,10 @@ | |
| 23473 | # else |
| 23474 | # define OS_VXWORKS 0 |
| 23475 | # endif |
| 23476 | #endif |
| 23477 | |
| 23478 | /* |
| 23479 | ** standard include files. |
| 23480 | */ |
| 23481 | #include <sys/types.h> |
| 23482 | #include <sys/stat.h> |
| 23483 |
+55
-70
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -23,10 +23,64 @@ | ||
| 23 | 23 | # define SQLITE_PRIVATE static |
| 24 | 24 | #endif |
| 25 | 25 | #ifndef SQLITE_API |
| 26 | 26 | # define SQLITE_API |
| 27 | 27 | #endif |
| 28 | +/************** Begin file sqliteInt.h ***************************************/ | |
| 29 | +/* | |
| 30 | +** 2001 September 15 | |
| 31 | +** | |
| 32 | +** The author disclaims copyright to this source code. In place of | |
| 33 | +** a legal notice, here is a blessing: | |
| 34 | +** | |
| 35 | +** May you do good and not evil. | |
| 36 | +** May you find forgiveness for yourself and forgive others. | |
| 37 | +** May you share freely, never taking more than you give. | |
| 38 | +** | |
| 39 | +************************************************************************* | |
| 40 | +** Internal interface definitions for SQLite. | |
| 41 | +** | |
| 42 | +*/ | |
| 43 | +#ifndef _SQLITEINT_H_ | |
| 44 | +#define _SQLITEINT_H_ | |
| 45 | + | |
| 46 | +/* | |
| 47 | +** These #defines should enable >2GB file support on POSIX if the | |
| 48 | +** underlying operating system supports it. If the OS lacks | |
| 49 | +** large file support, or if the OS is windows, these should be no-ops. | |
| 50 | +** | |
| 51 | +** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any | |
| 52 | +** system #includes. Hence, this block of code must be the very first | |
| 53 | +** code in all source files. | |
| 54 | +** | |
| 55 | +** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | |
| 56 | +** on the compiler command line. This is necessary if you are compiling | |
| 57 | +** on a recent machine (ex: Red Hat 7.2) but you want your code to work | |
| 58 | +** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 | |
| 59 | +** without this option, LFS is enable. But LFS does not exist in the kernel | |
| 60 | +** in Red Hat 6.0, so the code won't work. Hence, for maximum binary | |
| 61 | +** portability you should omit LFS. | |
| 62 | +** | |
| 63 | +** The previous paragraph was written in 2005. (This paragraph is written | |
| 64 | +** on 2008-11-28.) These days, all Linux kernels support large files, so | |
| 65 | +** you should probably leave LFS enabled. But some embedded platforms might | |
| 66 | +** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. | |
| 67 | +** | |
| 68 | +** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. | |
| 69 | +*/ | |
| 70 | +#ifndef SQLITE_DISABLE_LFS | |
| 71 | +# define _LARGE_FILE 1 | |
| 72 | +# ifndef _FILE_OFFSET_BITS | |
| 73 | +# define _FILE_OFFSET_BITS 64 | |
| 74 | +# endif | |
| 75 | +# define _LARGEFILE_SOURCE 1 | |
| 76 | +#endif | |
| 77 | + | |
| 78 | +/* The public SQLite interface. The _FILE_OFFSET_BITS macro must appear | |
| 79 | +** first in QNX. | |
| 80 | +*/ | |
| 81 | +/************** Include sqlite3.h in the middle of sqliteInt.h ***************/ | |
| 28 | 82 | /************** Begin file sqlite3.h *****************************************/ |
| 29 | 83 | /* |
| 30 | 84 | ** 2001 September 15 |
| 31 | 85 | ** |
| 32 | 86 | ** The author disclaims copyright to this source code. In place of |
| @@ -7411,54 +7465,11 @@ | ||
| 7411 | 7465 | |
| 7412 | 7466 | #endif /* ifndef _SQLITE3RTREE_H_ */ |
| 7413 | 7467 | |
| 7414 | 7468 | |
| 7415 | 7469 | /************** End of sqlite3.h *********************************************/ |
| 7416 | -/************** Begin file sqliteInt.h ***************************************/ | |
| 7417 | -/* | |
| 7418 | -** 2001 September 15 | |
| 7419 | -** | |
| 7420 | -** The author disclaims copyright to this source code. In place of | |
| 7421 | -** a legal notice, here is a blessing: | |
| 7422 | -** | |
| 7423 | -** May you do good and not evil. | |
| 7424 | -** May you find forgiveness for yourself and forgive others. | |
| 7425 | -** May you share freely, never taking more than you give. | |
| 7426 | -** | |
| 7427 | -************************************************************************* | |
| 7428 | -** Internal interface definitions for SQLite. | |
| 7429 | -** | |
| 7430 | -*/ | |
| 7431 | -#ifndef _SQLITEINT_H_ | |
| 7432 | -#define _SQLITEINT_H_ | |
| 7433 | - | |
| 7434 | -/* | |
| 7435 | -** These #defines should enable >2GB file support on POSIX if the | |
| 7436 | -** underlying operating system supports it. If the OS lacks | |
| 7437 | -** large file support, or if the OS is windows, these should be no-ops. | |
| 7438 | -** | |
| 7439 | -** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any | |
| 7440 | -** system #includes. Hence, this block of code must be the very first | |
| 7441 | -** code in all source files. | |
| 7442 | -** | |
| 7443 | -** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | |
| 7444 | -** on the compiler command line. This is necessary if you are compiling | |
| 7445 | -** on a recent machine (ex: Red Hat 7.2) but you want your code to work | |
| 7446 | -** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 | |
| 7447 | -** without this option, LFS is enable. But LFS does not exist in the kernel | |
| 7448 | -** in Red Hat 6.0, so the code won't work. Hence, for maximum binary | |
| 7449 | -** portability you should omit LFS. | |
| 7450 | -** | |
| 7451 | -** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. | |
| 7452 | -*/ | |
| 7453 | -#ifndef SQLITE_DISABLE_LFS | |
| 7454 | -# define _LARGE_FILE 1 | |
| 7455 | -# ifndef _FILE_OFFSET_BITS | |
| 7456 | -# define _FILE_OFFSET_BITS 64 | |
| 7457 | -# endif | |
| 7458 | -# define _LARGEFILE_SOURCE 1 | |
| 7459 | -#endif | |
| 7470 | +/************** Continuing where we left off in sqliteInt.h ******************/ | |
| 7460 | 7471 | |
| 7461 | 7472 | /* |
| 7462 | 7473 | ** For MinGW, check to see if we can include the header file containing its |
| 7463 | 7474 | ** version information, among other things. Normally, this internal MinGW |
| 7464 | 7475 | ** header file would [only] be included automatically by other MinGW header |
| @@ -23462,36 +23473,10 @@ | ||
| 23462 | 23473 | # else |
| 23463 | 23474 | # define OS_VXWORKS 0 |
| 23464 | 23475 | # endif |
| 23465 | 23476 | #endif |
| 23466 | 23477 | |
| 23467 | -/* | |
| 23468 | -** These #defines should enable >2GB file support on Posix if the | |
| 23469 | -** underlying operating system supports it. If the OS lacks | |
| 23470 | -** large file support, these should be no-ops. | |
| 23471 | -** | |
| 23472 | -** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch | |
| 23473 | -** on the compiler command line. This is necessary if you are compiling | |
| 23474 | -** on a recent machine (ex: RedHat 7.2) but you want your code to work | |
| 23475 | -** on an older machine (ex: RedHat 6.0). If you compile on RedHat 7.2 | |
| 23476 | -** without this option, LFS is enable. But LFS does not exist in the kernel | |
| 23477 | -** in RedHat 6.0, so the code won't work. Hence, for maximum binary | |
| 23478 | -** portability you should omit LFS. | |
| 23479 | -** | |
| 23480 | -** The previous paragraph was written in 2005. (This paragraph is written | |
| 23481 | -** on 2008-11-28.) These days, all Linux kernels support large files, so | |
| 23482 | -** you should probably leave LFS enabled. But some embedded platforms might | |
| 23483 | -** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. | |
| 23484 | -*/ | |
| 23485 | -#ifndef SQLITE_DISABLE_LFS | |
| 23486 | -# define _LARGE_FILE 1 | |
| 23487 | -# ifndef _FILE_OFFSET_BITS | |
| 23488 | -# define _FILE_OFFSET_BITS 64 | |
| 23489 | -# endif | |
| 23490 | -# define _LARGEFILE_SOURCE 1 | |
| 23491 | -#endif | |
| 23492 | - | |
| 23493 | 23478 | /* |
| 23494 | 23479 | ** standard include files. |
| 23495 | 23480 | */ |
| 23496 | 23481 | #include <sys/types.h> |
| 23497 | 23482 | #include <sys/stat.h> |
| 23498 | 23483 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -23,10 +23,64 @@ | |
| 23 | # define SQLITE_PRIVATE static |
| 24 | #endif |
| 25 | #ifndef SQLITE_API |
| 26 | # define SQLITE_API |
| 27 | #endif |
| 28 | /************** Begin file sqlite3.h *****************************************/ |
| 29 | /* |
| 30 | ** 2001 September 15 |
| 31 | ** |
| 32 | ** The author disclaims copyright to this source code. In place of |
| @@ -7411,54 +7465,11 @@ | |
| 7411 | |
| 7412 | #endif /* ifndef _SQLITE3RTREE_H_ */ |
| 7413 | |
| 7414 | |
| 7415 | /************** End of sqlite3.h *********************************************/ |
| 7416 | /************** Begin file sqliteInt.h ***************************************/ |
| 7417 | /* |
| 7418 | ** 2001 September 15 |
| 7419 | ** |
| 7420 | ** The author disclaims copyright to this source code. In place of |
| 7421 | ** a legal notice, here is a blessing: |
| 7422 | ** |
| 7423 | ** May you do good and not evil. |
| 7424 | ** May you find forgiveness for yourself and forgive others. |
| 7425 | ** May you share freely, never taking more than you give. |
| 7426 | ** |
| 7427 | ************************************************************************* |
| 7428 | ** Internal interface definitions for SQLite. |
| 7429 | ** |
| 7430 | */ |
| 7431 | #ifndef _SQLITEINT_H_ |
| 7432 | #define _SQLITEINT_H_ |
| 7433 | |
| 7434 | /* |
| 7435 | ** These #defines should enable >2GB file support on POSIX if the |
| 7436 | ** underlying operating system supports it. If the OS lacks |
| 7437 | ** large file support, or if the OS is windows, these should be no-ops. |
| 7438 | ** |
| 7439 | ** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any |
| 7440 | ** system #includes. Hence, this block of code must be the very first |
| 7441 | ** code in all source files. |
| 7442 | ** |
| 7443 | ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch |
| 7444 | ** on the compiler command line. This is necessary if you are compiling |
| 7445 | ** on a recent machine (ex: Red Hat 7.2) but you want your code to work |
| 7446 | ** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 |
| 7447 | ** without this option, LFS is enable. But LFS does not exist in the kernel |
| 7448 | ** in Red Hat 6.0, so the code won't work. Hence, for maximum binary |
| 7449 | ** portability you should omit LFS. |
| 7450 | ** |
| 7451 | ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. |
| 7452 | */ |
| 7453 | #ifndef SQLITE_DISABLE_LFS |
| 7454 | # define _LARGE_FILE 1 |
| 7455 | # ifndef _FILE_OFFSET_BITS |
| 7456 | # define _FILE_OFFSET_BITS 64 |
| 7457 | # endif |
| 7458 | # define _LARGEFILE_SOURCE 1 |
| 7459 | #endif |
| 7460 | |
| 7461 | /* |
| 7462 | ** For MinGW, check to see if we can include the header file containing its |
| 7463 | ** version information, among other things. Normally, this internal MinGW |
| 7464 | ** header file would [only] be included automatically by other MinGW header |
| @@ -23462,36 +23473,10 @@ | |
| 23462 | # else |
| 23463 | # define OS_VXWORKS 0 |
| 23464 | # endif |
| 23465 | #endif |
| 23466 | |
| 23467 | /* |
| 23468 | ** These #defines should enable >2GB file support on Posix if the |
| 23469 | ** underlying operating system supports it. If the OS lacks |
| 23470 | ** large file support, these should be no-ops. |
| 23471 | ** |
| 23472 | ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch |
| 23473 | ** on the compiler command line. This is necessary if you are compiling |
| 23474 | ** on a recent machine (ex: RedHat 7.2) but you want your code to work |
| 23475 | ** on an older machine (ex: RedHat 6.0). If you compile on RedHat 7.2 |
| 23476 | ** without this option, LFS is enable. But LFS does not exist in the kernel |
| 23477 | ** in RedHat 6.0, so the code won't work. Hence, for maximum binary |
| 23478 | ** portability you should omit LFS. |
| 23479 | ** |
| 23480 | ** The previous paragraph was written in 2005. (This paragraph is written |
| 23481 | ** on 2008-11-28.) These days, all Linux kernels support large files, so |
| 23482 | ** you should probably leave LFS enabled. But some embedded platforms might |
| 23483 | ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. |
| 23484 | */ |
| 23485 | #ifndef SQLITE_DISABLE_LFS |
| 23486 | # define _LARGE_FILE 1 |
| 23487 | # ifndef _FILE_OFFSET_BITS |
| 23488 | # define _FILE_OFFSET_BITS 64 |
| 23489 | # endif |
| 23490 | # define _LARGEFILE_SOURCE 1 |
| 23491 | #endif |
| 23492 | |
| 23493 | /* |
| 23494 | ** standard include files. |
| 23495 | */ |
| 23496 | #include <sys/types.h> |
| 23497 | #include <sys/stat.h> |
| 23498 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -23,10 +23,64 @@ | |
| 23 | # define SQLITE_PRIVATE static |
| 24 | #endif |
| 25 | #ifndef SQLITE_API |
| 26 | # define SQLITE_API |
| 27 | #endif |
| 28 | /************** Begin file sqliteInt.h ***************************************/ |
| 29 | /* |
| 30 | ** 2001 September 15 |
| 31 | ** |
| 32 | ** The author disclaims copyright to this source code. In place of |
| 33 | ** a legal notice, here is a blessing: |
| 34 | ** |
| 35 | ** May you do good and not evil. |
| 36 | ** May you find forgiveness for yourself and forgive others. |
| 37 | ** May you share freely, never taking more than you give. |
| 38 | ** |
| 39 | ************************************************************************* |
| 40 | ** Internal interface definitions for SQLite. |
| 41 | ** |
| 42 | */ |
| 43 | #ifndef _SQLITEINT_H_ |
| 44 | #define _SQLITEINT_H_ |
| 45 | |
| 46 | /* |
| 47 | ** These #defines should enable >2GB file support on POSIX if the |
| 48 | ** underlying operating system supports it. If the OS lacks |
| 49 | ** large file support, or if the OS is windows, these should be no-ops. |
| 50 | ** |
| 51 | ** Ticket #2739: The _LARGEFILE_SOURCE macro must appear before any |
| 52 | ** system #includes. Hence, this block of code must be the very first |
| 53 | ** code in all source files. |
| 54 | ** |
| 55 | ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch |
| 56 | ** on the compiler command line. This is necessary if you are compiling |
| 57 | ** on a recent machine (ex: Red Hat 7.2) but you want your code to work |
| 58 | ** on an older machine (ex: Red Hat 6.0). If you compile on Red Hat 7.2 |
| 59 | ** without this option, LFS is enable. But LFS does not exist in the kernel |
| 60 | ** in Red Hat 6.0, so the code won't work. Hence, for maximum binary |
| 61 | ** portability you should omit LFS. |
| 62 | ** |
| 63 | ** The previous paragraph was written in 2005. (This paragraph is written |
| 64 | ** on 2008-11-28.) These days, all Linux kernels support large files, so |
| 65 | ** you should probably leave LFS enabled. But some embedded platforms might |
| 66 | ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful. |
| 67 | ** |
| 68 | ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later. |
| 69 | */ |
| 70 | #ifndef SQLITE_DISABLE_LFS |
| 71 | # define _LARGE_FILE 1 |
| 72 | # ifndef _FILE_OFFSET_BITS |
| 73 | # define _FILE_OFFSET_BITS 64 |
| 74 | # endif |
| 75 | # define _LARGEFILE_SOURCE 1 |
| 76 | #endif |
| 77 | |
| 78 | /* The public SQLite interface. The _FILE_OFFSET_BITS macro must appear |
| 79 | ** first in QNX. |
| 80 | */ |
| 81 | /************** Include sqlite3.h in the middle of sqliteInt.h ***************/ |
| 82 | /************** Begin file sqlite3.h *****************************************/ |
| 83 | /* |
| 84 | ** 2001 September 15 |
| 85 | ** |
| 86 | ** The author disclaims copyright to this source code. In place of |
| @@ -7411,54 +7465,11 @@ | |
| 7465 | |
| 7466 | #endif /* ifndef _SQLITE3RTREE_H_ */ |
| 7467 | |
| 7468 | |
| 7469 | /************** End of sqlite3.h *********************************************/ |
| 7470 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 7471 | |
| 7472 | /* |
| 7473 | ** For MinGW, check to see if we can include the header file containing its |
| 7474 | ** version information, among other things. Normally, this internal MinGW |
| 7475 | ** header file would [only] be included automatically by other MinGW header |
| @@ -23462,36 +23473,10 @@ | |
| 23473 | # else |
| 23474 | # define OS_VXWORKS 0 |
| 23475 | # endif |
| 23476 | #endif |
| 23477 | |
| 23478 | /* |
| 23479 | ** standard include files. |
| 23480 | */ |
| 23481 | #include <sys/types.h> |
| 23482 | #include <sys/stat.h> |
| 23483 |
+3
-3
| --- src/stash.c | ||
| +++ src/stash.c | ||
| @@ -311,11 +311,11 @@ | ||
| 311 | 311 | int isLink = db_column_int(&q, 3); |
| 312 | 312 | int isBin1, isBin2; |
| 313 | 313 | const char *zOrig = db_column_text(&q, 4); |
| 314 | 314 | const char *zNew = db_column_text(&q, 5); |
| 315 | 315 | char *zOPath = mprintf("%s%s", g.zLocalRoot, zOrig); |
| 316 | - Blob delta, a, b, disk; | |
| 316 | + Blob a, b; | |
| 317 | 317 | if( rid==0 ){ |
| 318 | 318 | db_ephemeral_blob(&q, 6, &a); |
| 319 | 319 | fossil_print("ADDED %s\n", zNew); |
| 320 | 320 | diff_print_index(zNew, diffFlags); |
| 321 | 321 | isBin1 = 0; |
| @@ -337,10 +337,11 @@ | ||
| 337 | 337 | isBin1 = fIncludeBinary ? 0 : looks_like_binary(&a); |
| 338 | 338 | isBin2 = 0; |
| 339 | 339 | diff_file_mem(&a, &empty, isBin1, isBin2, zOrig, zDiffCmd, |
| 340 | 340 | zBinGlob, fIncludeBinary, diffFlags); |
| 341 | 341 | }else{ |
| 342 | + Blob delta, disk; | |
| 342 | 343 | int isOrigLink = file_wd_islink(zOPath); |
| 343 | 344 | db_ephemeral_blob(&q, 6, &delta); |
| 344 | 345 | if( fBaseline==0 ){ |
| 345 | 346 | if( isOrigLink ){ |
| 346 | 347 | blob_read_link(&disk, zOPath); |
| @@ -363,12 +364,12 @@ | ||
| 363 | 364 | zDiffCmd, zBinGlob, fIncludeBinary, diffFlags); |
| 364 | 365 | blob_reset(&a); |
| 365 | 366 | blob_reset(&b); |
| 366 | 367 | } |
| 367 | 368 | if( !fBaseline ) blob_reset(&disk); |
| 369 | + blob_reset(&delta); | |
| 368 | 370 | } |
| 369 | - blob_reset(&delta); | |
| 370 | 371 | } |
| 371 | 372 | db_finalize(&q); |
| 372 | 373 | } |
| 373 | 374 | |
| 374 | 375 | /* |
| @@ -568,11 +569,10 @@ | ||
| 568 | 569 | if( memcmp(zCmd, "drop", nCmd)==0 || memcmp(zCmd, "rm", nCmd)==0 ){ |
| 569 | 570 | int allFlag = find_option("all", "a", 0)!=0; |
| 570 | 571 | if( allFlag ){ |
| 571 | 572 | Blob ans; |
| 572 | 573 | char cReply; |
| 573 | - blob_zero(&ans); | |
| 574 | 574 | prompt_user("This action is not undoable. Continue (y/N)? ", &ans); |
| 575 | 575 | cReply = blob_str(&ans)[0]; |
| 576 | 576 | if( cReply=='y' || cReply=='Y' ){ |
| 577 | 577 | db_multi_exec("DELETE FROM stash; DELETE FROM stashfile;"); |
| 578 | 578 | } |
| 579 | 579 |
| --- src/stash.c | |
| +++ src/stash.c | |
| @@ -311,11 +311,11 @@ | |
| 311 | int isLink = db_column_int(&q, 3); |
| 312 | int isBin1, isBin2; |
| 313 | const char *zOrig = db_column_text(&q, 4); |
| 314 | const char *zNew = db_column_text(&q, 5); |
| 315 | char *zOPath = mprintf("%s%s", g.zLocalRoot, zOrig); |
| 316 | Blob delta, a, b, disk; |
| 317 | if( rid==0 ){ |
| 318 | db_ephemeral_blob(&q, 6, &a); |
| 319 | fossil_print("ADDED %s\n", zNew); |
| 320 | diff_print_index(zNew, diffFlags); |
| 321 | isBin1 = 0; |
| @@ -337,10 +337,11 @@ | |
| 337 | isBin1 = fIncludeBinary ? 0 : looks_like_binary(&a); |
| 338 | isBin2 = 0; |
| 339 | diff_file_mem(&a, &empty, isBin1, isBin2, zOrig, zDiffCmd, |
| 340 | zBinGlob, fIncludeBinary, diffFlags); |
| 341 | }else{ |
| 342 | int isOrigLink = file_wd_islink(zOPath); |
| 343 | db_ephemeral_blob(&q, 6, &delta); |
| 344 | if( fBaseline==0 ){ |
| 345 | if( isOrigLink ){ |
| 346 | blob_read_link(&disk, zOPath); |
| @@ -363,12 +364,12 @@ | |
| 363 | zDiffCmd, zBinGlob, fIncludeBinary, diffFlags); |
| 364 | blob_reset(&a); |
| 365 | blob_reset(&b); |
| 366 | } |
| 367 | if( !fBaseline ) blob_reset(&disk); |
| 368 | } |
| 369 | blob_reset(&delta); |
| 370 | } |
| 371 | db_finalize(&q); |
| 372 | } |
| 373 | |
| 374 | /* |
| @@ -568,11 +569,10 @@ | |
| 568 | if( memcmp(zCmd, "drop", nCmd)==0 || memcmp(zCmd, "rm", nCmd)==0 ){ |
| 569 | int allFlag = find_option("all", "a", 0)!=0; |
| 570 | if( allFlag ){ |
| 571 | Blob ans; |
| 572 | char cReply; |
| 573 | blob_zero(&ans); |
| 574 | prompt_user("This action is not undoable. Continue (y/N)? ", &ans); |
| 575 | cReply = blob_str(&ans)[0]; |
| 576 | if( cReply=='y' || cReply=='Y' ){ |
| 577 | db_multi_exec("DELETE FROM stash; DELETE FROM stashfile;"); |
| 578 | } |
| 579 |
| --- src/stash.c | |
| +++ src/stash.c | |
| @@ -311,11 +311,11 @@ | |
| 311 | int isLink = db_column_int(&q, 3); |
| 312 | int isBin1, isBin2; |
| 313 | const char *zOrig = db_column_text(&q, 4); |
| 314 | const char *zNew = db_column_text(&q, 5); |
| 315 | char *zOPath = mprintf("%s%s", g.zLocalRoot, zOrig); |
| 316 | Blob a, b; |
| 317 | if( rid==0 ){ |
| 318 | db_ephemeral_blob(&q, 6, &a); |
| 319 | fossil_print("ADDED %s\n", zNew); |
| 320 | diff_print_index(zNew, diffFlags); |
| 321 | isBin1 = 0; |
| @@ -337,10 +337,11 @@ | |
| 337 | isBin1 = fIncludeBinary ? 0 : looks_like_binary(&a); |
| 338 | isBin2 = 0; |
| 339 | diff_file_mem(&a, &empty, isBin1, isBin2, zOrig, zDiffCmd, |
| 340 | zBinGlob, fIncludeBinary, diffFlags); |
| 341 | }else{ |
| 342 | Blob delta, disk; |
| 343 | int isOrigLink = file_wd_islink(zOPath); |
| 344 | db_ephemeral_blob(&q, 6, &delta); |
| 345 | if( fBaseline==0 ){ |
| 346 | if( isOrigLink ){ |
| 347 | blob_read_link(&disk, zOPath); |
| @@ -363,12 +364,12 @@ | |
| 364 | zDiffCmd, zBinGlob, fIncludeBinary, diffFlags); |
| 365 | blob_reset(&a); |
| 366 | blob_reset(&b); |
| 367 | } |
| 368 | if( !fBaseline ) blob_reset(&disk); |
| 369 | blob_reset(&delta); |
| 370 | } |
| 371 | } |
| 372 | db_finalize(&q); |
| 373 | } |
| 374 | |
| 375 | /* |
| @@ -568,11 +569,10 @@ | |
| 569 | if( memcmp(zCmd, "drop", nCmd)==0 || memcmp(zCmd, "rm", nCmd)==0 ){ |
| 570 | int allFlag = find_option("all", "a", 0)!=0; |
| 571 | if( allFlag ){ |
| 572 | Blob ans; |
| 573 | char cReply; |
| 574 | prompt_user("This action is not undoable. Continue (y/N)? ", &ans); |
| 575 | cReply = blob_str(&ans)[0]; |
| 576 | if( cReply=='y' || cReply=='Y' ){ |
| 577 | db_multi_exec("DELETE FROM stash; DELETE FROM stashfile;"); |
| 578 | } |
| 579 |
+11
-13
| --- src/update.c | ||
| +++ src/update.c | ||
| @@ -717,16 +717,12 @@ | ||
| 717 | 717 | db_multi_exec( |
| 718 | 718 | "REPLACE INTO torevert VALUES(%B);" |
| 719 | 719 | "INSERT OR IGNORE INTO torevert" |
| 720 | 720 | " SELECT pathname" |
| 721 | 721 | " FROM vfile" |
| 722 | - " WHERE origname IN(%B)" | |
| 723 | - " UNION ALL" | |
| 724 | - " SELECT origname" | |
| 725 | - " FROM vfile" | |
| 726 | - " WHERE pathname IN(%B) AND origname IS NOT NULL;", | |
| 727 | - &fname, &fname, &fname | |
| 722 | + " WHERE origname=%B;", | |
| 723 | + &fname, &fname | |
| 728 | 724 | ); |
| 729 | 725 | blob_reset(&fname); |
| 730 | 726 | } |
| 731 | 727 | }else{ |
| 732 | 728 | int vid; |
| @@ -735,17 +731,19 @@ | ||
| 735 | 731 | db_multi_exec( |
| 736 | 732 | "DELETE FROM vmerge;" |
| 737 | 733 | "INSERT OR IGNORE INTO torevert " |
| 738 | 734 | " SELECT pathname" |
| 739 | 735 | " FROM vfile " |
| 740 | - " WHERE chnged OR deleted OR rid=0 OR pathname!=origname " | |
| 741 | - " UNION ALL " | |
| 742 | - " SELECT origname" | |
| 743 | - " FROM vfile" | |
| 744 | - " WHERE origname!=pathname;" | |
| 736 | + " WHERE chnged OR deleted OR rid=0 OR pathname!=origname;" | |
| 745 | 737 | ); |
| 746 | 738 | } |
| 739 | + db_multi_exec( | |
| 740 | + "INSERT OR IGNORE INTO torevert" | |
| 741 | + " SELECT origname" | |
| 742 | + " FROM vfile" | |
| 743 | + " WHERE origname!=pathname AND pathname IN (SELECT name FROM torevert);" | |
| 744 | + ); | |
| 747 | 745 | blob_zero(&record); |
| 748 | 746 | db_prepare(&q, "SELECT name FROM torevert"); |
| 749 | 747 | if( zRevision==0 ){ |
| 750 | 748 | int vid = db_lget_int("checkout", 0); |
| 751 | 749 | zRevision = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid); |
| @@ -766,13 +764,13 @@ | ||
| 766 | 764 | undo_save(zFile); |
| 767 | 765 | file_delete(zFull); |
| 768 | 766 | fossil_print("DELETE: %s\n", zFile); |
| 769 | 767 | } |
| 770 | 768 | db_multi_exec( |
| 771 | - "UPDATE vfile" | |
| 769 | + "UPDATE OR REPLACE vfile" | |
| 772 | 770 | " SET pathname=origname, origname=NULL" |
| 773 | - " WHERE pathname=%Q AND origname!=pathname AND origname IS NOT NULL;" | |
| 771 | + " WHERE pathname=%Q AND origname!=pathname;" | |
| 774 | 772 | "DELETE FROM vfile WHERE pathname=%Q", |
| 775 | 773 | zFile, zFile |
| 776 | 774 | ); |
| 777 | 775 | }else{ |
| 778 | 776 | sqlite3_int64 mtime; |
| 779 | 777 |
| --- src/update.c | |
| +++ src/update.c | |
| @@ -717,16 +717,12 @@ | |
| 717 | db_multi_exec( |
| 718 | "REPLACE INTO torevert VALUES(%B);" |
| 719 | "INSERT OR IGNORE INTO torevert" |
| 720 | " SELECT pathname" |
| 721 | " FROM vfile" |
| 722 | " WHERE origname IN(%B)" |
| 723 | " UNION ALL" |
| 724 | " SELECT origname" |
| 725 | " FROM vfile" |
| 726 | " WHERE pathname IN(%B) AND origname IS NOT NULL;", |
| 727 | &fname, &fname, &fname |
| 728 | ); |
| 729 | blob_reset(&fname); |
| 730 | } |
| 731 | }else{ |
| 732 | int vid; |
| @@ -735,17 +731,19 @@ | |
| 735 | db_multi_exec( |
| 736 | "DELETE FROM vmerge;" |
| 737 | "INSERT OR IGNORE INTO torevert " |
| 738 | " SELECT pathname" |
| 739 | " FROM vfile " |
| 740 | " WHERE chnged OR deleted OR rid=0 OR pathname!=origname " |
| 741 | " UNION ALL " |
| 742 | " SELECT origname" |
| 743 | " FROM vfile" |
| 744 | " WHERE origname!=pathname;" |
| 745 | ); |
| 746 | } |
| 747 | blob_zero(&record); |
| 748 | db_prepare(&q, "SELECT name FROM torevert"); |
| 749 | if( zRevision==0 ){ |
| 750 | int vid = db_lget_int("checkout", 0); |
| 751 | zRevision = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid); |
| @@ -766,13 +764,13 @@ | |
| 766 | undo_save(zFile); |
| 767 | file_delete(zFull); |
| 768 | fossil_print("DELETE: %s\n", zFile); |
| 769 | } |
| 770 | db_multi_exec( |
| 771 | "UPDATE vfile" |
| 772 | " SET pathname=origname, origname=NULL" |
| 773 | " WHERE pathname=%Q AND origname!=pathname AND origname IS NOT NULL;" |
| 774 | "DELETE FROM vfile WHERE pathname=%Q", |
| 775 | zFile, zFile |
| 776 | ); |
| 777 | }else{ |
| 778 | sqlite3_int64 mtime; |
| 779 |
| --- src/update.c | |
| +++ src/update.c | |
| @@ -717,16 +717,12 @@ | |
| 717 | db_multi_exec( |
| 718 | "REPLACE INTO torevert VALUES(%B);" |
| 719 | "INSERT OR IGNORE INTO torevert" |
| 720 | " SELECT pathname" |
| 721 | " FROM vfile" |
| 722 | " WHERE origname=%B;", |
| 723 | &fname, &fname |
| 724 | ); |
| 725 | blob_reset(&fname); |
| 726 | } |
| 727 | }else{ |
| 728 | int vid; |
| @@ -735,17 +731,19 @@ | |
| 731 | db_multi_exec( |
| 732 | "DELETE FROM vmerge;" |
| 733 | "INSERT OR IGNORE INTO torevert " |
| 734 | " SELECT pathname" |
| 735 | " FROM vfile " |
| 736 | " WHERE chnged OR deleted OR rid=0 OR pathname!=origname;" |
| 737 | ); |
| 738 | } |
| 739 | db_multi_exec( |
| 740 | "INSERT OR IGNORE INTO torevert" |
| 741 | " SELECT origname" |
| 742 | " FROM vfile" |
| 743 | " WHERE origname!=pathname AND pathname IN (SELECT name FROM torevert);" |
| 744 | ); |
| 745 | blob_zero(&record); |
| 746 | db_prepare(&q, "SELECT name FROM torevert"); |
| 747 | if( zRevision==0 ){ |
| 748 | int vid = db_lget_int("checkout", 0); |
| 749 | zRevision = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid); |
| @@ -766,13 +764,13 @@ | |
| 764 | undo_save(zFile); |
| 765 | file_delete(zFull); |
| 766 | fossil_print("DELETE: %s\n", zFile); |
| 767 | } |
| 768 | db_multi_exec( |
| 769 | "UPDATE OR REPLACE vfile" |
| 770 | " SET pathname=origname, origname=NULL" |
| 771 | " WHERE pathname=%Q AND origname!=pathname;" |
| 772 | "DELETE FROM vfile WHERE pathname=%Q", |
| 773 | zFile, zFile |
| 774 | ); |
| 775 | }else{ |
| 776 | sqlite3_int64 mtime; |
| 777 |
+23
-3
| --- src/vfile.c | ||
| +++ src/vfile.c | ||
| @@ -486,15 +486,25 @@ | ||
| 486 | 486 | blob_appendf(pPath, "/%s", zUtf8); |
| 487 | 487 | zPath = blob_str(pPath); |
| 488 | 488 | if( glob_match(pIgnore1, &zPath[nPrefix+1]) || |
| 489 | 489 | glob_match(pIgnore2, &zPath[nPrefix+1]) ){ |
| 490 | 490 | /* do nothing */ |
| 491 | +#ifdef _DIRENT_HAVE_D_TYPE | |
| 492 | + }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) | |
| 493 | + ? (file_wd_isdir(zPath)==1) : (pEntry->d_type==DT_DIR) ){ | |
| 494 | +#else | |
| 491 | 495 | }else if( file_wd_isdir(zPath)==1 ){ |
| 496 | +#endif | |
| 492 | 497 | if( !vfile_top_of_checkout(zPath) ){ |
| 493 | 498 | vfile_scan(pPath, nPrefix, scanFlags, pIgnore1, pIgnore2); |
| 494 | 499 | } |
| 500 | +#ifdef _DIRENT_HAVE_D_TYPE | |
| 501 | + }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) | |
| 502 | + ? (file_wd_isfile_or_link(zPath)) : (pEntry->d_type==DT_REG) ){ | |
| 503 | +#else | |
| 495 | 504 | }else if( file_wd_isfile_or_link(zPath) ){ |
| 505 | +#endif | |
| 496 | 506 | if( (scanFlags & SCAN_TEMP)==0 || is_temporary_file(zUtf8) ){ |
| 497 | 507 | db_bind_text(&ins, ":file", &zPath[nPrefix+1]); |
| 498 | 508 | db_step(&ins); |
| 499 | 509 | db_reset(&ins); |
| 500 | 510 | } |
| @@ -593,11 +603,16 @@ | ||
| 593 | 603 | zPath = blob_str(pPath); |
| 594 | 604 | if( glob_match(pIgnore1, &zPath[nPrefix+1]) || |
| 595 | 605 | glob_match(pIgnore2, &zPath[nPrefix+1]) || |
| 596 | 606 | glob_match(pIgnore3, &zPath[nPrefix+1]) ){ |
| 597 | 607 | /* do nothing */ |
| 608 | +#ifdef _DIRENT_HAVE_D_TYPE | |
| 609 | + }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) | |
| 610 | + ? (file_wd_isdir(zPath)==1) : (pEntry->d_type==DT_DIR) ){ | |
| 611 | +#else | |
| 598 | 612 | }else if( file_wd_isdir(zPath)==1 ){ |
| 613 | +#endif | |
| 599 | 614 | if( (scanFlags & SCAN_NESTED) || !vfile_top_of_checkout(zPath) ){ |
| 600 | 615 | char *zSavePath = mprintf("%s", zPath); |
| 601 | 616 | int count = vfile_dir_scan(pPath, nPrefix, scanFlags, pIgnore1, |
| 602 | 617 | pIgnore2, pIgnore3); |
| 603 | 618 | db_bind_text(&ins, ":file", &zSavePath[nPrefix+1]); |
| @@ -605,11 +620,16 @@ | ||
| 605 | 620 | db_step(&ins); |
| 606 | 621 | db_reset(&ins); |
| 607 | 622 | fossil_free(zSavePath); |
| 608 | 623 | result += count; /* found X normal files? */ |
| 609 | 624 | } |
| 625 | +#ifdef _DIRENT_HAVE_D_TYPE | |
| 626 | + }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) | |
| 627 | + ? (file_wd_isfile_or_link(zPath)) : (pEntry->d_type==DT_REG) ){ | |
| 628 | +#else | |
| 610 | 629 | }else if( file_wd_isfile_or_link(zPath) ){ |
| 630 | +#endif | |
| 611 | 631 | db_bind_text(&upd, ":file", zOrigPath); |
| 612 | 632 | db_step(&upd); |
| 613 | 633 | db_reset(&upd); |
| 614 | 634 | result++; /* found 1 normal file */ |
| 615 | 635 | } |
| @@ -704,11 +724,11 @@ | ||
| 704 | 724 | const char *zOrigName = db_column_text(&q, 2); |
| 705 | 725 | char zBuf[100]; |
| 706 | 726 | Blob file; |
| 707 | 727 | |
| 708 | 728 | if( zOrigName ) zName = zOrigName; |
| 709 | - if( rid>0 ){ | |
| 729 | + if( rid>0 || vid==0 ){ | |
| 710 | 730 | md5sum_step_text(zName, -1); |
| 711 | 731 | blob_zero(&file); |
| 712 | 732 | content_get(rid, &file); |
| 713 | 733 | sqlite3_snprintf(sizeof(zBuf), zBuf, " %d\n", blob_size(&file)); |
| 714 | 734 | md5sum_step_text(zBuf, -1); |
| @@ -813,13 +833,13 @@ | ||
| 813 | 833 | db_must_be_within_tree(); |
| 814 | 834 | |
| 815 | 835 | db_prepare(&q, "SELECT pathname, origname, rid, is_selected(id)" |
| 816 | 836 | " FROM vfile" |
| 817 | 837 | " WHERE (NOT deleted OR NOT is_selected(id))" |
| 818 | - " AND rid>0 AND vid=%d" | |
| 838 | + " %s AND vid=%d" | |
| 819 | 839 | " ORDER BY if_selected(id,pathname,origname) /*scan*/", |
| 820 | - vid); | |
| 840 | + (vid ? "AND rid>0" : ""), vid); | |
| 821 | 841 | blob_zero(&file); |
| 822 | 842 | md5sum_init(); |
| 823 | 843 | while( db_step(&q)==SQLITE_ROW ){ |
| 824 | 844 | const char *zName = db_column_text(&q, 0); |
| 825 | 845 | const char *zOrigName = db_column_text(&q, 1); |
| 826 | 846 |
| --- src/vfile.c | |
| +++ src/vfile.c | |
| @@ -486,15 +486,25 @@ | |
| 486 | blob_appendf(pPath, "/%s", zUtf8); |
| 487 | zPath = blob_str(pPath); |
| 488 | if( glob_match(pIgnore1, &zPath[nPrefix+1]) || |
| 489 | glob_match(pIgnore2, &zPath[nPrefix+1]) ){ |
| 490 | /* do nothing */ |
| 491 | }else if( file_wd_isdir(zPath)==1 ){ |
| 492 | if( !vfile_top_of_checkout(zPath) ){ |
| 493 | vfile_scan(pPath, nPrefix, scanFlags, pIgnore1, pIgnore2); |
| 494 | } |
| 495 | }else if( file_wd_isfile_or_link(zPath) ){ |
| 496 | if( (scanFlags & SCAN_TEMP)==0 || is_temporary_file(zUtf8) ){ |
| 497 | db_bind_text(&ins, ":file", &zPath[nPrefix+1]); |
| 498 | db_step(&ins); |
| 499 | db_reset(&ins); |
| 500 | } |
| @@ -593,11 +603,16 @@ | |
| 593 | zPath = blob_str(pPath); |
| 594 | if( glob_match(pIgnore1, &zPath[nPrefix+1]) || |
| 595 | glob_match(pIgnore2, &zPath[nPrefix+1]) || |
| 596 | glob_match(pIgnore3, &zPath[nPrefix+1]) ){ |
| 597 | /* do nothing */ |
| 598 | }else if( file_wd_isdir(zPath)==1 ){ |
| 599 | if( (scanFlags & SCAN_NESTED) || !vfile_top_of_checkout(zPath) ){ |
| 600 | char *zSavePath = mprintf("%s", zPath); |
| 601 | int count = vfile_dir_scan(pPath, nPrefix, scanFlags, pIgnore1, |
| 602 | pIgnore2, pIgnore3); |
| 603 | db_bind_text(&ins, ":file", &zSavePath[nPrefix+1]); |
| @@ -605,11 +620,16 @@ | |
| 605 | db_step(&ins); |
| 606 | db_reset(&ins); |
| 607 | fossil_free(zSavePath); |
| 608 | result += count; /* found X normal files? */ |
| 609 | } |
| 610 | }else if( file_wd_isfile_or_link(zPath) ){ |
| 611 | db_bind_text(&upd, ":file", zOrigPath); |
| 612 | db_step(&upd); |
| 613 | db_reset(&upd); |
| 614 | result++; /* found 1 normal file */ |
| 615 | } |
| @@ -704,11 +724,11 @@ | |
| 704 | const char *zOrigName = db_column_text(&q, 2); |
| 705 | char zBuf[100]; |
| 706 | Blob file; |
| 707 | |
| 708 | if( zOrigName ) zName = zOrigName; |
| 709 | if( rid>0 ){ |
| 710 | md5sum_step_text(zName, -1); |
| 711 | blob_zero(&file); |
| 712 | content_get(rid, &file); |
| 713 | sqlite3_snprintf(sizeof(zBuf), zBuf, " %d\n", blob_size(&file)); |
| 714 | md5sum_step_text(zBuf, -1); |
| @@ -813,13 +833,13 @@ | |
| 813 | db_must_be_within_tree(); |
| 814 | |
| 815 | db_prepare(&q, "SELECT pathname, origname, rid, is_selected(id)" |
| 816 | " FROM vfile" |
| 817 | " WHERE (NOT deleted OR NOT is_selected(id))" |
| 818 | " AND rid>0 AND vid=%d" |
| 819 | " ORDER BY if_selected(id,pathname,origname) /*scan*/", |
| 820 | vid); |
| 821 | blob_zero(&file); |
| 822 | md5sum_init(); |
| 823 | while( db_step(&q)==SQLITE_ROW ){ |
| 824 | const char *zName = db_column_text(&q, 0); |
| 825 | const char *zOrigName = db_column_text(&q, 1); |
| 826 |
| --- src/vfile.c | |
| +++ src/vfile.c | |
| @@ -486,15 +486,25 @@ | |
| 486 | blob_appendf(pPath, "/%s", zUtf8); |
| 487 | zPath = blob_str(pPath); |
| 488 | if( glob_match(pIgnore1, &zPath[nPrefix+1]) || |
| 489 | glob_match(pIgnore2, &zPath[nPrefix+1]) ){ |
| 490 | /* do nothing */ |
| 491 | #ifdef _DIRENT_HAVE_D_TYPE |
| 492 | }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) |
| 493 | ? (file_wd_isdir(zPath)==1) : (pEntry->d_type==DT_DIR) ){ |
| 494 | #else |
| 495 | }else if( file_wd_isdir(zPath)==1 ){ |
| 496 | #endif |
| 497 | if( !vfile_top_of_checkout(zPath) ){ |
| 498 | vfile_scan(pPath, nPrefix, scanFlags, pIgnore1, pIgnore2); |
| 499 | } |
| 500 | #ifdef _DIRENT_HAVE_D_TYPE |
| 501 | }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) |
| 502 | ? (file_wd_isfile_or_link(zPath)) : (pEntry->d_type==DT_REG) ){ |
| 503 | #else |
| 504 | }else if( file_wd_isfile_or_link(zPath) ){ |
| 505 | #endif |
| 506 | if( (scanFlags & SCAN_TEMP)==0 || is_temporary_file(zUtf8) ){ |
| 507 | db_bind_text(&ins, ":file", &zPath[nPrefix+1]); |
| 508 | db_step(&ins); |
| 509 | db_reset(&ins); |
| 510 | } |
| @@ -593,11 +603,16 @@ | |
| 603 | zPath = blob_str(pPath); |
| 604 | if( glob_match(pIgnore1, &zPath[nPrefix+1]) || |
| 605 | glob_match(pIgnore2, &zPath[nPrefix+1]) || |
| 606 | glob_match(pIgnore3, &zPath[nPrefix+1]) ){ |
| 607 | /* do nothing */ |
| 608 | #ifdef _DIRENT_HAVE_D_TYPE |
| 609 | }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) |
| 610 | ? (file_wd_isdir(zPath)==1) : (pEntry->d_type==DT_DIR) ){ |
| 611 | #else |
| 612 | }else if( file_wd_isdir(zPath)==1 ){ |
| 613 | #endif |
| 614 | if( (scanFlags & SCAN_NESTED) || !vfile_top_of_checkout(zPath) ){ |
| 615 | char *zSavePath = mprintf("%s", zPath); |
| 616 | int count = vfile_dir_scan(pPath, nPrefix, scanFlags, pIgnore1, |
| 617 | pIgnore2, pIgnore3); |
| 618 | db_bind_text(&ins, ":file", &zSavePath[nPrefix+1]); |
| @@ -605,11 +620,16 @@ | |
| 620 | db_step(&ins); |
| 621 | db_reset(&ins); |
| 622 | fossil_free(zSavePath); |
| 623 | result += count; /* found X normal files? */ |
| 624 | } |
| 625 | #ifdef _DIRENT_HAVE_D_TYPE |
| 626 | }else if( (pEntry->d_type==DT_UNKNOWN || pEntry->d_type==DT_LNK) |
| 627 | ? (file_wd_isfile_or_link(zPath)) : (pEntry->d_type==DT_REG) ){ |
| 628 | #else |
| 629 | }else if( file_wd_isfile_or_link(zPath) ){ |
| 630 | #endif |
| 631 | db_bind_text(&upd, ":file", zOrigPath); |
| 632 | db_step(&upd); |
| 633 | db_reset(&upd); |
| 634 | result++; /* found 1 normal file */ |
| 635 | } |
| @@ -704,11 +724,11 @@ | |
| 724 | const char *zOrigName = db_column_text(&q, 2); |
| 725 | char zBuf[100]; |
| 726 | Blob file; |
| 727 | |
| 728 | if( zOrigName ) zName = zOrigName; |
| 729 | if( rid>0 || vid==0 ){ |
| 730 | md5sum_step_text(zName, -1); |
| 731 | blob_zero(&file); |
| 732 | content_get(rid, &file); |
| 733 | sqlite3_snprintf(sizeof(zBuf), zBuf, " %d\n", blob_size(&file)); |
| 734 | md5sum_step_text(zBuf, -1); |
| @@ -813,13 +833,13 @@ | |
| 833 | db_must_be_within_tree(); |
| 834 | |
| 835 | db_prepare(&q, "SELECT pathname, origname, rid, is_selected(id)" |
| 836 | " FROM vfile" |
| 837 | " WHERE (NOT deleted OR NOT is_selected(id))" |
| 838 | " %s AND vid=%d" |
| 839 | " ORDER BY if_selected(id,pathname,origname) /*scan*/", |
| 840 | (vid ? "AND rid>0" : ""), vid); |
| 841 | blob_zero(&file); |
| 842 | md5sum_init(); |
| 843 | while( db_step(&q)==SQLITE_ROW ){ |
| 844 | const char *zName = db_column_text(&q, 0); |
| 845 | const char *zOrigName = db_column_text(&q, 1); |
| 846 |
+3
-28
| --- test/merge_renames.test | ||
| +++ test/merge_renames.test | ||
| @@ -1,30 +1,16 @@ | ||
| 1 | 1 | # |
| 2 | 2 | # Tests for merging with renames |
| 3 | 3 | # |
| 4 | 4 | # |
| 5 | - | |
| 6 | -catch {exec $::fossilexe info} res | |
| 7 | -puts res=$res | |
| 8 | -if {![regexp {use --repository} $res]} { | |
| 9 | - puts stderr "Cannot run this test within an open checkout" | |
| 10 | - return | |
| 11 | -} | |
| 12 | - | |
| 13 | - | |
| 14 | -# Fossil will write data on $HOME, running 'fossil new' here. | |
| 15 | -# We need not to clutter the $HOME of the test caller. | |
| 16 | -set env(HOME) [pwd] | |
| 17 | - | |
| 18 | 5 | |
| 19 | 6 | ###################################### |
| 20 | 7 | # Test 1 # |
| 21 | 8 | # Reported: Ticket [554f44ee74e3d] # |
| 22 | 9 | ###################################### |
| 23 | 10 | |
| 24 | -fossil new rep.fossil | |
| 25 | -fossil open rep.fossil | |
| 11 | +repo_init | |
| 26 | 12 | |
| 27 | 13 | write_file f1 "line" |
| 28 | 14 | fossil add f1 |
| 29 | 15 | fossil commit -m "c1" |
| 30 | 16 | fossil tag add pivot current |
| @@ -73,20 +59,16 @@ | ||
| 73 | 59 | test merge_renames-1 0 |
| 74 | 60 | } else { |
| 75 | 61 | test merge_renames-1 1 |
| 76 | 62 | } |
| 77 | 63 | |
| 78 | -fossil close -f | |
| 79 | -file delete rep.fossil | |
| 80 | - | |
| 81 | 64 | ###################################### |
| 82 | 65 | # Test 2 # |
| 83 | 66 | # Reported: Ticket [74413366fe5067] # |
| 84 | 67 | ###################################### |
| 85 | 68 | |
| 86 | -fossil new rep.fossil | |
| 87 | -fossil open rep.fossil | |
| 69 | +repo_init | |
| 88 | 70 | |
| 89 | 71 | write_file f1 "line" |
| 90 | 72 | fossil add f1 |
| 91 | 73 | fossil commit -m "base file" |
| 92 | 74 | fossil tag add pivot current |
| @@ -125,20 +107,16 @@ | ||
| 125 | 107 | test merge_renames-2 0 |
| 126 | 108 | } else { |
| 127 | 109 | test merge_renames-2 1 |
| 128 | 110 | } |
| 129 | 111 | |
| 130 | -fossil close -f | |
| 131 | -file delete rep.fossil | |
| 132 | - | |
| 133 | 112 | ###################################### |
| 134 | 113 | # Test 3 # |
| 135 | 114 | # Reported: Ticket [30b28cf351] # |
| 136 | 115 | ###################################### |
| 137 | 116 | |
| 138 | -fossil new rep.fossil | |
| 139 | -fossil open rep.fossil | |
| 117 | +repo_init | |
| 140 | 118 | |
| 141 | 119 | write_file f1 "line" |
| 142 | 120 | fossil add f1 |
| 143 | 121 | fossil commit -m "base file" |
| 144 | 122 | fossil tag add pivot current |
| @@ -177,13 +155,10 @@ | ||
| 177 | 155 | test merge_renames-2 0 |
| 178 | 156 | } else { |
| 179 | 157 | test merge_renames-2 1 |
| 180 | 158 | } |
| 181 | 159 | |
| 182 | -fossil close -f | |
| 183 | -file delete rep.fossil | |
| 184 | - | |
| 185 | 160 | ###################################### |
| 186 | 161 | # Test 4 # |
| 187 | 162 | # Reported: Ticket [67176c3aa4] # |
| 188 | 163 | ###################################### |
| 189 | 164 | |
| 190 | 165 |
| --- test/merge_renames.test | |
| +++ test/merge_renames.test | |
| @@ -1,30 +1,16 @@ | |
| 1 | # |
| 2 | # Tests for merging with renames |
| 3 | # |
| 4 | # |
| 5 | |
| 6 | catch {exec $::fossilexe info} res |
| 7 | puts res=$res |
| 8 | if {![regexp {use --repository} $res]} { |
| 9 | puts stderr "Cannot run this test within an open checkout" |
| 10 | return |
| 11 | } |
| 12 | |
| 13 | |
| 14 | # Fossil will write data on $HOME, running 'fossil new' here. |
| 15 | # We need not to clutter the $HOME of the test caller. |
| 16 | set env(HOME) [pwd] |
| 17 | |
| 18 | |
| 19 | ###################################### |
| 20 | # Test 1 # |
| 21 | # Reported: Ticket [554f44ee74e3d] # |
| 22 | ###################################### |
| 23 | |
| 24 | fossil new rep.fossil |
| 25 | fossil open rep.fossil |
| 26 | |
| 27 | write_file f1 "line" |
| 28 | fossil add f1 |
| 29 | fossil commit -m "c1" |
| 30 | fossil tag add pivot current |
| @@ -73,20 +59,16 @@ | |
| 73 | test merge_renames-1 0 |
| 74 | } else { |
| 75 | test merge_renames-1 1 |
| 76 | } |
| 77 | |
| 78 | fossil close -f |
| 79 | file delete rep.fossil |
| 80 | |
| 81 | ###################################### |
| 82 | # Test 2 # |
| 83 | # Reported: Ticket [74413366fe5067] # |
| 84 | ###################################### |
| 85 | |
| 86 | fossil new rep.fossil |
| 87 | fossil open rep.fossil |
| 88 | |
| 89 | write_file f1 "line" |
| 90 | fossil add f1 |
| 91 | fossil commit -m "base file" |
| 92 | fossil tag add pivot current |
| @@ -125,20 +107,16 @@ | |
| 125 | test merge_renames-2 0 |
| 126 | } else { |
| 127 | test merge_renames-2 1 |
| 128 | } |
| 129 | |
| 130 | fossil close -f |
| 131 | file delete rep.fossil |
| 132 | |
| 133 | ###################################### |
| 134 | # Test 3 # |
| 135 | # Reported: Ticket [30b28cf351] # |
| 136 | ###################################### |
| 137 | |
| 138 | fossil new rep.fossil |
| 139 | fossil open rep.fossil |
| 140 | |
| 141 | write_file f1 "line" |
| 142 | fossil add f1 |
| 143 | fossil commit -m "base file" |
| 144 | fossil tag add pivot current |
| @@ -177,13 +155,10 @@ | |
| 177 | test merge_renames-2 0 |
| 178 | } else { |
| 179 | test merge_renames-2 1 |
| 180 | } |
| 181 | |
| 182 | fossil close -f |
| 183 | file delete rep.fossil |
| 184 | |
| 185 | ###################################### |
| 186 | # Test 4 # |
| 187 | # Reported: Ticket [67176c3aa4] # |
| 188 | ###################################### |
| 189 | |
| 190 |
| --- test/merge_renames.test | |
| +++ test/merge_renames.test | |
| @@ -1,30 +1,16 @@ | |
| 1 | # |
| 2 | # Tests for merging with renames |
| 3 | # |
| 4 | # |
| 5 | |
| 6 | ###################################### |
| 7 | # Test 1 # |
| 8 | # Reported: Ticket [554f44ee74e3d] # |
| 9 | ###################################### |
| 10 | |
| 11 | repo_init |
| 12 | |
| 13 | write_file f1 "line" |
| 14 | fossil add f1 |
| 15 | fossil commit -m "c1" |
| 16 | fossil tag add pivot current |
| @@ -73,20 +59,16 @@ | |
| 59 | test merge_renames-1 0 |
| 60 | } else { |
| 61 | test merge_renames-1 1 |
| 62 | } |
| 63 | |
| 64 | ###################################### |
| 65 | # Test 2 # |
| 66 | # Reported: Ticket [74413366fe5067] # |
| 67 | ###################################### |
| 68 | |
| 69 | repo_init |
| 70 | |
| 71 | write_file f1 "line" |
| 72 | fossil add f1 |
| 73 | fossil commit -m "base file" |
| 74 | fossil tag add pivot current |
| @@ -125,20 +107,16 @@ | |
| 107 | test merge_renames-2 0 |
| 108 | } else { |
| 109 | test merge_renames-2 1 |
| 110 | } |
| 111 | |
| 112 | ###################################### |
| 113 | # Test 3 # |
| 114 | # Reported: Ticket [30b28cf351] # |
| 115 | ###################################### |
| 116 | |
| 117 | repo_init |
| 118 | |
| 119 | write_file f1 "line" |
| 120 | fossil add f1 |
| 121 | fossil commit -m "base file" |
| 122 | fossil tag add pivot current |
| @@ -177,13 +155,10 @@ | |
| 155 | test merge_renames-2 0 |
| 156 | } else { |
| 157 | test merge_renames-2 1 |
| 158 | } |
| 159 | |
| 160 | ###################################### |
| 161 | # Test 4 # |
| 162 | # Reported: Ticket [67176c3aa4] # |
| 163 | ###################################### |
| 164 | |
| 165 |
+59
-55
| --- test/revert.test | ||
| +++ test/revert.test | ||
| @@ -1,65 +1,30 @@ | ||
| 1 | 1 | # |
| 2 | 2 | # Tests for 'fossil revert' |
| 3 | 3 | # |
| 4 | 4 | # |
| 5 | 5 | |
| 6 | -catch {exec $::fossilexe info} res | |
| 7 | -puts res=$res | |
| 8 | -if {![regexp {use --repository} $res]} { | |
| 9 | - puts stderr "Cannot run this test within an open checkout" | |
| 10 | - return | |
| 11 | -} | |
| 12 | - | |
| 13 | -# Fossil will write data on $HOME, running 'fossil new' here. | |
| 14 | -# We need not to clutter the $HOME of the test caller. | |
| 15 | -# | |
| 16 | -set env(HOME) [pwd] | |
| 17 | - | |
| 18 | - | |
| 19 | -# Normalize file status lists (like those returned by 'fossil changes') | |
| 20 | -# so they can be compared using simple string comparison | |
| 21 | -# | |
| 22 | -proc normalize-status-list {list} { | |
| 23 | - set normalized [list] | |
| 24 | - set matches [regexp -all -inline -line {^\s*([A-Z]+)\s+(.*)$} $list] | |
| 25 | - foreach {_ status file} $matches { | |
| 26 | - lappend normalized [list $status [string trim $file]] | |
| 27 | - } | |
| 28 | - set normalized [lsort -index 1 $normalized] | |
| 29 | - return $normalized | |
| 30 | -} | |
| 31 | - | |
| 32 | 6 | # Test 'fossil revert' against expected results from 'fossil changes' and |
| 33 | -# 'fossil addremove --test', as well as by verifying the existence of files | |
| 7 | +# 'fossil addremove -n', as well as by verifying the existence of files | |
| 34 | 8 | # on the file system. 'fossil undo' is called after each test |
| 35 | 9 | # |
| 36 | -proc revert-test {testid args} { | |
| 10 | +proc revert-test {testid revertArgs expectedRevertOutput args} { | |
| 37 | 11 | global RESULT |
| 38 | 12 | set passed 1 |
| 39 | 13 | |
| 40 | - if {[llength $args] % 2} { | |
| 41 | - set revertArgs [lindex $args 0] | |
| 42 | - set args [lrange $args 1 end] | |
| 43 | - } else { | |
| 44 | - set revertArgs {} | |
| 45 | - } | |
| 46 | 14 | set args [dict merge { |
| 47 | 15 | -changes {} -addremove {} -exists {} -notexists {} |
| 48 | 16 | } $args] |
| 49 | 17 | |
| 50 | - fossil revert {*}$revertArgs | |
| 18 | + set result [fossil revert {*}$revertArgs] | |
| 19 | + test_status_list revert-$testid $result $expectedRevertOutput | |
| 51 | 20 | |
| 52 | - set statusListTests [list -changes changes -addremove {addremove --test}] | |
| 21 | + set statusListTests [list -changes changes -addremove {addremove -n}] | |
| 53 | 22 | foreach {key fossilArgs} $statusListTests { |
| 54 | - set expected [normalize-status-list [dict get $args $key]] | |
| 55 | - set result [normalize-status-list [fossil {*}$fossilArgs]] | |
| 56 | - if {$result ne $expected} { | |
| 57 | - set passed 0 | |
| 58 | - protOut " Expected:\n [join $expected "\n "]" | |
| 59 | - protOut " Got:\n [join $result "\n "]" | |
| 60 | - } | |
| 23 | + set expected [dict get $args $key] | |
| 24 | + set result [fossil {*}$fossilArgs] | |
| 25 | + test_status_list revert-$testid$key $result $expected | |
| 61 | 26 | } |
| 62 | 27 | |
| 63 | 28 | set fileExistsTests [list -exists 1 does -notexists 0 should] |
| 64 | 29 | foreach {key expected verb} $fileExistsTests { |
| 65 | 30 | foreach path [dict get $args $key] { |
| @@ -66,20 +31,17 @@ | ||
| 66 | 31 | if {[file exists $path] != $expected} { |
| 67 | 32 | set passed 0 |
| 68 | 33 | protOut " Failure: File $verb not exist: $path" |
| 69 | 34 | } |
| 70 | 35 | } |
| 36 | + test revert-$testid$key $passed | |
| 71 | 37 | } |
| 72 | 38 | |
| 73 | 39 | fossil undo |
| 74 | - test revert-$testid $passed | |
| 75 | 40 | } |
| 76 | 41 | |
| 77 | -# Create the repo | |
| 78 | -# | |
| 79 | -fossil new rep.fossil | |
| 80 | -fossil open rep.fossil | |
| 42 | +repo_init | |
| 81 | 43 | |
| 82 | 44 | # Prepare first commit |
| 83 | 45 | # |
| 84 | 46 | write_file f1 "f1" |
| 85 | 47 | write_file f2 "f2" |
| @@ -101,53 +63,95 @@ | ||
| 101 | 63 | file rename -force f3 f3n |
| 102 | 64 | fossil mv f3 f3n |
| 103 | 65 | |
| 104 | 66 | # Test 'fossil revert' with no arguments |
| 105 | 67 | # |
| 106 | -revert-test 1 -addremove { | |
| 68 | +revert-test 1-1 {} { | |
| 69 | + UNMANAGE: f0 | |
| 70 | + REVERTED: f1 | |
| 71 | + REVERTED: f2 | |
| 72 | + REVERTED: f3 | |
| 73 | + DELETE: f3n | |
| 74 | +} -addremove { | |
| 107 | 75 | ADDED f0 |
| 108 | 76 | } -exists {f0 f1 f2 f3} -notexists f3n |
| 109 | 77 | |
| 110 | 78 | # Test with a single filename argument |
| 111 | 79 | # |
| 112 | -revert-test 2 f0 -changes { | |
| 80 | +revert-test 1-2 f0 { | |
| 81 | + UNMANAGE: f0 | |
| 82 | +} -changes { | |
| 113 | 83 | DELETED f1 |
| 114 | 84 | EDITED f2 |
| 115 | 85 | RENAMED f3n |
| 116 | 86 | } -addremove { |
| 117 | 87 | ADDED f0 |
| 118 | 88 | } -exists {f0 f2 f3n} -notexists f3 |
| 119 | 89 | |
| 120 | -revert-test 3 f1 -changes { | |
| 90 | +revert-test 1-3 f1 { | |
| 91 | + REVERTED: f1 | |
| 92 | +} -changes { | |
| 121 | 93 | ADDED f0 |
| 122 | 94 | EDITED f2 |
| 123 | 95 | RENAMED f3n |
| 124 | 96 | } -exists {f0 f1 f2 f3n} -notexists f3 |
| 125 | 97 | |
| 126 | -revert-test 4 f2 -changes { | |
| 98 | +revert-test 1-4 f2 { | |
| 99 | + REVERTED: f2 | |
| 100 | +} -changes { | |
| 127 | 101 | ADDED f0 |
| 128 | 102 | DELETED f1 |
| 129 | 103 | RENAMED f3n |
| 130 | 104 | } -exists {f0 f2 f3n} -notexists {f1 f3} |
| 131 | 105 | |
| 132 | 106 | # Both files involved in a rename are reverted regardless of which filename |
| 133 | 107 | # is used as an argument to 'fossil revert' |
| 134 | 108 | # |
| 135 | -revert-test 5 f3 -changes { | |
| 109 | +revert-test 1-5 f3 { | |
| 110 | + REVERTED: f3 | |
| 111 | + DELETE: f3n | |
| 112 | +} -changes { | |
| 136 | 113 | ADDED f0 |
| 137 | 114 | DELETED f1 |
| 138 | 115 | EDITED f2 |
| 139 | 116 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 140 | 117 | |
| 141 | -revert-test 6 f3n -changes { | |
| 118 | +revert-test 1-6 f3n { | |
| 119 | + REVERTED: f3 | |
| 120 | + DELETE: f3n | |
| 121 | +} -changes { | |
| 142 | 122 | ADDED f0 |
| 143 | 123 | DELETED f1 |
| 144 | 124 | EDITED f2 |
| 145 | 125 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 146 | 126 | |
| 147 | 127 | # Test with multiple filename arguments |
| 148 | 128 | # |
| 149 | -revert-test 7 {f0 f2 f3n} -changes { | |
| 129 | +revert-test 1-7 {f0 f2 f3n} { | |
| 130 | + UNMANAGE: f0 | |
| 131 | + REVERTED: f2 | |
| 132 | + REVERTED: f3 | |
| 133 | + DELETE: f3n | |
| 134 | +} -changes { | |
| 150 | 135 | DELETED f1 |
| 151 | 136 | } -addremove { |
| 152 | 137 | ADDED f0 |
| 153 | 138 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 139 | + | |
| 140 | + | |
| 141 | +# Test reverting the combination of a renamed file and an added file that | |
| 142 | +# uses the renamed file's original filename. | |
| 143 | +# | |
| 144 | +repo_init | |
| 145 | +write_file f1 "f1" | |
| 146 | +fossil add f1 | |
| 147 | +fossil commit -m "add f1" | |
| 148 | + | |
| 149 | +write_file f1n "f1n" | |
| 150 | +fossil mv f1 f1n | |
| 151 | +write_file f1 "f1b" | |
| 152 | +fossil add f1 | |
| 153 | + | |
| 154 | +revert-test 2-1 {} { | |
| 155 | + REVERTED: f1 | |
| 156 | + DELETE: f1n | |
| 157 | +} -exists {f1} -notexists {f1n} | |
| 154 | 158 |
| --- test/revert.test | |
| +++ test/revert.test | |
| @@ -1,65 +1,30 @@ | |
| 1 | # |
| 2 | # Tests for 'fossil revert' |
| 3 | # |
| 4 | # |
| 5 | |
| 6 | catch {exec $::fossilexe info} res |
| 7 | puts res=$res |
| 8 | if {![regexp {use --repository} $res]} { |
| 9 | puts stderr "Cannot run this test within an open checkout" |
| 10 | return |
| 11 | } |
| 12 | |
| 13 | # Fossil will write data on $HOME, running 'fossil new' here. |
| 14 | # We need not to clutter the $HOME of the test caller. |
| 15 | # |
| 16 | set env(HOME) [pwd] |
| 17 | |
| 18 | |
| 19 | # Normalize file status lists (like those returned by 'fossil changes') |
| 20 | # so they can be compared using simple string comparison |
| 21 | # |
| 22 | proc normalize-status-list {list} { |
| 23 | set normalized [list] |
| 24 | set matches [regexp -all -inline -line {^\s*([A-Z]+)\s+(.*)$} $list] |
| 25 | foreach {_ status file} $matches { |
| 26 | lappend normalized [list $status [string trim $file]] |
| 27 | } |
| 28 | set normalized [lsort -index 1 $normalized] |
| 29 | return $normalized |
| 30 | } |
| 31 | |
| 32 | # Test 'fossil revert' against expected results from 'fossil changes' and |
| 33 | # 'fossil addremove --test', as well as by verifying the existence of files |
| 34 | # on the file system. 'fossil undo' is called after each test |
| 35 | # |
| 36 | proc revert-test {testid args} { |
| 37 | global RESULT |
| 38 | set passed 1 |
| 39 | |
| 40 | if {[llength $args] % 2} { |
| 41 | set revertArgs [lindex $args 0] |
| 42 | set args [lrange $args 1 end] |
| 43 | } else { |
| 44 | set revertArgs {} |
| 45 | } |
| 46 | set args [dict merge { |
| 47 | -changes {} -addremove {} -exists {} -notexists {} |
| 48 | } $args] |
| 49 | |
| 50 | fossil revert {*}$revertArgs |
| 51 | |
| 52 | set statusListTests [list -changes changes -addremove {addremove --test}] |
| 53 | foreach {key fossilArgs} $statusListTests { |
| 54 | set expected [normalize-status-list [dict get $args $key]] |
| 55 | set result [normalize-status-list [fossil {*}$fossilArgs]] |
| 56 | if {$result ne $expected} { |
| 57 | set passed 0 |
| 58 | protOut " Expected:\n [join $expected "\n "]" |
| 59 | protOut " Got:\n [join $result "\n "]" |
| 60 | } |
| 61 | } |
| 62 | |
| 63 | set fileExistsTests [list -exists 1 does -notexists 0 should] |
| 64 | foreach {key expected verb} $fileExistsTests { |
| 65 | foreach path [dict get $args $key] { |
| @@ -66,20 +31,17 @@ | |
| 66 | if {[file exists $path] != $expected} { |
| 67 | set passed 0 |
| 68 | protOut " Failure: File $verb not exist: $path" |
| 69 | } |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | fossil undo |
| 74 | test revert-$testid $passed |
| 75 | } |
| 76 | |
| 77 | # Create the repo |
| 78 | # |
| 79 | fossil new rep.fossil |
| 80 | fossil open rep.fossil |
| 81 | |
| 82 | # Prepare first commit |
| 83 | # |
| 84 | write_file f1 "f1" |
| 85 | write_file f2 "f2" |
| @@ -101,53 +63,95 @@ | |
| 101 | file rename -force f3 f3n |
| 102 | fossil mv f3 f3n |
| 103 | |
| 104 | # Test 'fossil revert' with no arguments |
| 105 | # |
| 106 | revert-test 1 -addremove { |
| 107 | ADDED f0 |
| 108 | } -exists {f0 f1 f2 f3} -notexists f3n |
| 109 | |
| 110 | # Test with a single filename argument |
| 111 | # |
| 112 | revert-test 2 f0 -changes { |
| 113 | DELETED f1 |
| 114 | EDITED f2 |
| 115 | RENAMED f3n |
| 116 | } -addremove { |
| 117 | ADDED f0 |
| 118 | } -exists {f0 f2 f3n} -notexists f3 |
| 119 | |
| 120 | revert-test 3 f1 -changes { |
| 121 | ADDED f0 |
| 122 | EDITED f2 |
| 123 | RENAMED f3n |
| 124 | } -exists {f0 f1 f2 f3n} -notexists f3 |
| 125 | |
| 126 | revert-test 4 f2 -changes { |
| 127 | ADDED f0 |
| 128 | DELETED f1 |
| 129 | RENAMED f3n |
| 130 | } -exists {f0 f2 f3n} -notexists {f1 f3} |
| 131 | |
| 132 | # Both files involved in a rename are reverted regardless of which filename |
| 133 | # is used as an argument to 'fossil revert' |
| 134 | # |
| 135 | revert-test 5 f3 -changes { |
| 136 | ADDED f0 |
| 137 | DELETED f1 |
| 138 | EDITED f2 |
| 139 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 140 | |
| 141 | revert-test 6 f3n -changes { |
| 142 | ADDED f0 |
| 143 | DELETED f1 |
| 144 | EDITED f2 |
| 145 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 146 | |
| 147 | # Test with multiple filename arguments |
| 148 | # |
| 149 | revert-test 7 {f0 f2 f3n} -changes { |
| 150 | DELETED f1 |
| 151 | } -addremove { |
| 152 | ADDED f0 |
| 153 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 154 |
| --- test/revert.test | |
| +++ test/revert.test | |
| @@ -1,65 +1,30 @@ | |
| 1 | # |
| 2 | # Tests for 'fossil revert' |
| 3 | # |
| 4 | # |
| 5 | |
| 6 | # Test 'fossil revert' against expected results from 'fossil changes' and |
| 7 | # 'fossil addremove -n', as well as by verifying the existence of files |
| 8 | # on the file system. 'fossil undo' is called after each test |
| 9 | # |
| 10 | proc revert-test {testid revertArgs expectedRevertOutput args} { |
| 11 | global RESULT |
| 12 | set passed 1 |
| 13 | |
| 14 | set args [dict merge { |
| 15 | -changes {} -addremove {} -exists {} -notexists {} |
| 16 | } $args] |
| 17 | |
| 18 | set result [fossil revert {*}$revertArgs] |
| 19 | test_status_list revert-$testid $result $expectedRevertOutput |
| 20 | |
| 21 | set statusListTests [list -changes changes -addremove {addremove -n}] |
| 22 | foreach {key fossilArgs} $statusListTests { |
| 23 | set expected [dict get $args $key] |
| 24 | set result [fossil {*}$fossilArgs] |
| 25 | test_status_list revert-$testid$key $result $expected |
| 26 | } |
| 27 | |
| 28 | set fileExistsTests [list -exists 1 does -notexists 0 should] |
| 29 | foreach {key expected verb} $fileExistsTests { |
| 30 | foreach path [dict get $args $key] { |
| @@ -66,20 +31,17 @@ | |
| 31 | if {[file exists $path] != $expected} { |
| 32 | set passed 0 |
| 33 | protOut " Failure: File $verb not exist: $path" |
| 34 | } |
| 35 | } |
| 36 | test revert-$testid$key $passed |
| 37 | } |
| 38 | |
| 39 | fossil undo |
| 40 | } |
| 41 | |
| 42 | repo_init |
| 43 | |
| 44 | # Prepare first commit |
| 45 | # |
| 46 | write_file f1 "f1" |
| 47 | write_file f2 "f2" |
| @@ -101,53 +63,95 @@ | |
| 63 | file rename -force f3 f3n |
| 64 | fossil mv f3 f3n |
| 65 | |
| 66 | # Test 'fossil revert' with no arguments |
| 67 | # |
| 68 | revert-test 1-1 {} { |
| 69 | UNMANAGE: f0 |
| 70 | REVERTED: f1 |
| 71 | REVERTED: f2 |
| 72 | REVERTED: f3 |
| 73 | DELETE: f3n |
| 74 | } -addremove { |
| 75 | ADDED f0 |
| 76 | } -exists {f0 f1 f2 f3} -notexists f3n |
| 77 | |
| 78 | # Test with a single filename argument |
| 79 | # |
| 80 | revert-test 1-2 f0 { |
| 81 | UNMANAGE: f0 |
| 82 | } -changes { |
| 83 | DELETED f1 |
| 84 | EDITED f2 |
| 85 | RENAMED f3n |
| 86 | } -addremove { |
| 87 | ADDED f0 |
| 88 | } -exists {f0 f2 f3n} -notexists f3 |
| 89 | |
| 90 | revert-test 1-3 f1 { |
| 91 | REVERTED: f1 |
| 92 | } -changes { |
| 93 | ADDED f0 |
| 94 | EDITED f2 |
| 95 | RENAMED f3n |
| 96 | } -exists {f0 f1 f2 f3n} -notexists f3 |
| 97 | |
| 98 | revert-test 1-4 f2 { |
| 99 | REVERTED: f2 |
| 100 | } -changes { |
| 101 | ADDED f0 |
| 102 | DELETED f1 |
| 103 | RENAMED f3n |
| 104 | } -exists {f0 f2 f3n} -notexists {f1 f3} |
| 105 | |
| 106 | # Both files involved in a rename are reverted regardless of which filename |
| 107 | # is used as an argument to 'fossil revert' |
| 108 | # |
| 109 | revert-test 1-5 f3 { |
| 110 | REVERTED: f3 |
| 111 | DELETE: f3n |
| 112 | } -changes { |
| 113 | ADDED f0 |
| 114 | DELETED f1 |
| 115 | EDITED f2 |
| 116 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 117 | |
| 118 | revert-test 1-6 f3n { |
| 119 | REVERTED: f3 |
| 120 | DELETE: f3n |
| 121 | } -changes { |
| 122 | ADDED f0 |
| 123 | DELETED f1 |
| 124 | EDITED f2 |
| 125 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 126 | |
| 127 | # Test with multiple filename arguments |
| 128 | # |
| 129 | revert-test 1-7 {f0 f2 f3n} { |
| 130 | UNMANAGE: f0 |
| 131 | REVERTED: f2 |
| 132 | REVERTED: f3 |
| 133 | DELETE: f3n |
| 134 | } -changes { |
| 135 | DELETED f1 |
| 136 | } -addremove { |
| 137 | ADDED f0 |
| 138 | } -exists {f0 f2 f3} -notexists {f1 f3n} |
| 139 | |
| 140 | |
| 141 | # Test reverting the combination of a renamed file and an added file that |
| 142 | # uses the renamed file's original filename. |
| 143 | # |
| 144 | repo_init |
| 145 | write_file f1 "f1" |
| 146 | fossil add f1 |
| 147 | fossil commit -m "add f1" |
| 148 | |
| 149 | write_file f1n "f1n" |
| 150 | fossil mv f1 f1n |
| 151 | write_file f1 "f1b" |
| 152 | fossil add f1 |
| 153 | |
| 154 | revert-test 2-1 {} { |
| 155 | REVERTED: f1 |
| 156 | DELETE: f1n |
| 157 | } -exists {f1} -notexists {f1n} |
| 158 |
+47
| --- test/tester.tcl | ||
| +++ test/tester.tcl | ||
| @@ -120,10 +120,57 @@ | ||
| 120 | 120 | regsub -all { +\n} $x \n x |
| 121 | 121 | set y [read_file $b] |
| 122 | 122 | regsub -all { +\n} $y \n y |
| 123 | 123 | return [expr {$x==$y}] |
| 124 | 124 | } |
| 125 | + | |
| 126 | +# Create and open a new Fossil repository and clean the checkout | |
| 127 | +# | |
| 128 | +proc repo_init {{filename ".rep.fossil"}} { | |
| 129 | + if {$::env(HOME) ne [pwd]} { | |
| 130 | + catch {exec $::fossilexe info} res | |
| 131 | + if {![regexp {use --repository} $res]} { | |
| 132 | + error "In an open checkout: cannot initialize a new repository here." | |
| 133 | + } | |
| 134 | + # Fossil will write data on $HOME, running 'fossil new' here. | |
| 135 | + # We need not to clutter the $HOME of the test caller. | |
| 136 | + # | |
| 137 | + set ::env(HOME) [pwd] | |
| 138 | + } | |
| 139 | + catch {exec $::fossilexe close -f} | |
| 140 | + file delete $filename | |
| 141 | + exec $::fossilexe new $filename | |
| 142 | + exec $::fossilexe open $filename | |
| 143 | + exec $::fossilexe clean -f | |
| 144 | +} | |
| 145 | + | |
| 146 | +# Normalize file status lists (like those returned by 'fossil changes') | |
| 147 | +# so they can be compared using simple string comparison | |
| 148 | +# | |
| 149 | +proc normalize_status_list {list} { | |
| 150 | + set normalized [list] | |
| 151 | + set matches [regexp -all -inline -line {^\s*([A-Z_]+:?)\x20+(\S.*)$} $list] | |
| 152 | + foreach {_ status file} $matches { | |
| 153 | + lappend normalized [list $status [string trim $file]] | |
| 154 | + } | |
| 155 | + set normalized [lsort -index 1 $normalized] | |
| 156 | + return $normalized | |
| 157 | +} | |
| 158 | + | |
| 159 | +# Perform a test comparing two status lists | |
| 160 | +# | |
| 161 | +proc test_status_list {name result expected} { | |
| 162 | + set expected [normalize_status_list $expected] | |
| 163 | + set result [normalize_status_list $result] | |
| 164 | + if {$result eq $expected} { | |
| 165 | + test $name 1 | |
| 166 | + } else { | |
| 167 | + protOut " Expected:\n [join $expected "\n "]" | |
| 168 | + protOut " Got:\n [join $result "\n "]" | |
| 169 | + test $name 0 | |
| 170 | + } | |
| 171 | +} | |
| 125 | 172 | |
| 126 | 173 | # Perform a test |
| 127 | 174 | # |
| 128 | 175 | set test_count 0 |
| 129 | 176 | proc test {name expr} { |
| 130 | 177 |
| --- test/tester.tcl | |
| +++ test/tester.tcl | |
| @@ -120,10 +120,57 @@ | |
| 120 | regsub -all { +\n} $x \n x |
| 121 | set y [read_file $b] |
| 122 | regsub -all { +\n} $y \n y |
| 123 | return [expr {$x==$y}] |
| 124 | } |
| 125 | |
| 126 | # Perform a test |
| 127 | # |
| 128 | set test_count 0 |
| 129 | proc test {name expr} { |
| 130 |
| --- test/tester.tcl | |
| +++ test/tester.tcl | |
| @@ -120,10 +120,57 @@ | |
| 120 | regsub -all { +\n} $x \n x |
| 121 | set y [read_file $b] |
| 122 | regsub -all { +\n} $y \n y |
| 123 | return [expr {$x==$y}] |
| 124 | } |
| 125 | |
| 126 | # Create and open a new Fossil repository and clean the checkout |
| 127 | # |
| 128 | proc repo_init {{filename ".rep.fossil"}} { |
| 129 | if {$::env(HOME) ne [pwd]} { |
| 130 | catch {exec $::fossilexe info} res |
| 131 | if {![regexp {use --repository} $res]} { |
| 132 | error "In an open checkout: cannot initialize a new repository here." |
| 133 | } |
| 134 | # Fossil will write data on $HOME, running 'fossil new' here. |
| 135 | # We need not to clutter the $HOME of the test caller. |
| 136 | # |
| 137 | set ::env(HOME) [pwd] |
| 138 | } |
| 139 | catch {exec $::fossilexe close -f} |
| 140 | file delete $filename |
| 141 | exec $::fossilexe new $filename |
| 142 | exec $::fossilexe open $filename |
| 143 | exec $::fossilexe clean -f |
| 144 | } |
| 145 | |
| 146 | # Normalize file status lists (like those returned by 'fossil changes') |
| 147 | # so they can be compared using simple string comparison |
| 148 | # |
| 149 | proc normalize_status_list {list} { |
| 150 | set normalized [list] |
| 151 | set matches [regexp -all -inline -line {^\s*([A-Z_]+:?)\x20+(\S.*)$} $list] |
| 152 | foreach {_ status file} $matches { |
| 153 | lappend normalized [list $status [string trim $file]] |
| 154 | } |
| 155 | set normalized [lsort -index 1 $normalized] |
| 156 | return $normalized |
| 157 | } |
| 158 | |
| 159 | # Perform a test comparing two status lists |
| 160 | # |
| 161 | proc test_status_list {name result expected} { |
| 162 | set expected [normalize_status_list $expected] |
| 163 | set result [normalize_status_list $result] |
| 164 | if {$result eq $expected} { |
| 165 | test $name 1 |
| 166 | } else { |
| 167 | protOut " Expected:\n [join $expected "\n "]" |
| 168 | protOut " Got:\n [join $result "\n "]" |
| 169 | test $name 0 |
| 170 | } |
| 171 | } |
| 172 | |
| 173 | # Perform a test |
| 174 | # |
| 175 | set test_count 0 |
| 176 | proc test {name expr} { |
| 177 |
+23
-22
| --- www/changes.wiki | ||
| +++ www/changes.wiki | ||
| @@ -7,10 +7,11 @@ | ||
| 7 | 7 | * The [/reports] page now requires Read ("o") permissions. The "byweek" |
| 8 | 8 | report now properly propagates the selected year through the event type |
| 9 | 9 | filter links. |
| 10 | 10 | * The [/help/info | info command] now shows leaf status of the checkout. |
| 11 | 11 | * Add support for tunneling https through a http proxy (Ticket [e854101c4f]). |
| 12 | + * Add option --empty to the "[/help?cmd=open | fossil open]" command. | |
| 12 | 13 | |
| 13 | 14 | <h2>Changes For Version 1.28 (2014-01-27)</h2> |
| 14 | 15 | * Enhance [/help?cmd=/reports | /reports] to support event type filtering. |
| 15 | 16 | * When cloning a repository, the user name passed via the URL (if any) |
| 16 | 17 | is now used as the default local admin user's name. |
| @@ -26,40 +27,40 @@ | ||
| 26 | 27 | Admin/Configuration. |
| 27 | 28 | * Fix CGI processing so that it works on web servers that do not |
| 28 | 29 | supply REQUEST_URI. |
| 29 | 30 | * Add options --dirsonly, --emptydirs, and --allckouts to the |
| 30 | 31 | "[/help?cmd=clean | fossil clean]" command. |
| 31 | - * Ten-fold performance improvement in large "fossil blame" or | |
| 32 | + * Ten-fold performance improvement in large "fossil blame" or | |
| 32 | 33 | "fossil annotate" commands. |
| 33 | 34 | * Add option -W|--width and --offset to "[/help?cmd=timeline | fossil timeline]" |
| 34 | 35 | and "[/help?cmd=finfo | fossil finfo]" commands. |
| 35 | 36 | * Option -n|--limit of "[/help?cmd=timeline | fossil timeline]" now |
| 36 | 37 | specifies the number of entries, just like all other commands which |
| 37 | 38 | have the -n|--limit option. The various timeline-related functions |
| 38 | 39 | now output "--- ?? limit (??) reached ---" at the end whenever |
| 39 | 40 | appropriate. Use "-n 0" if no limit is desired. |
| 40 | 41 | * Fix handling of password embedded in Fossil URL. |
| 41 | - * New <tt>--once</tt> option to [/help?cmd=clone | fossil clone] command | |
| 42 | + * New <tt>--once</tt> option to [/help?cmd=clone | fossil clone] command | |
| 42 | 43 | which does not store the URL or password when cloning. |
| 43 | 44 | * Modify [/help?cmd=ui | fossil ui] to respect "default user" in an open |
| 44 | 45 | repository. |
| 45 | 46 | * Fossil now hides check-ins that have the "hidden" tag in timeline webpages. |
| 46 | 47 | * Enhance <tt>/ci_edit</tt> page to add the "hidden" tag to check-ins. |
| 47 | 48 | * Advanced possibilities for commit and ticket change notifications over |
| 48 | 49 | http using TH1 scripting. |
| 49 | - * Add --sha1sum and --integrate options | |
| 50 | + * Add --sha1sum and --integrate options | |
| 50 | 51 | to the "[/help?cmd=commit | fossil commit]" command. |
| 51 | - * Add the "clean" and "extra" subcommands to the | |
| 52 | + * Add the "clean" and "extra" subcommands to the | |
| 52 | 53 | "[/help?cmd=all | fossil all]" command |
| 53 | 54 | * Add the --whatif option to "[/help?cmd=clean|fossil clean]" that works the |
| 54 | 55 | same as "--dry-run", |
| 55 | 56 | so that the name does not collide with the --dry-run option of "fossil all". |
| 56 | 57 | * Provide a configuration option to show dates on the web timeline |
| 57 | 58 | as "YYMMMDD HH:MM" |
| 58 | 59 | * Add an option to the "stats" webpage that allows an administrator to see |
| 59 | 60 | the current repository schema. |
| 60 | - * Enhancements to the "[/help?cmd=/vdiff|/vdiff]" webpage for more difference | |
| 61 | + * Enhancements to the "[/help?cmd=/vdiff|/vdiff]" webpage for more difference | |
| 61 | 62 | display options. |
| 62 | 63 | * Added the "[/tree?ci=trunk&expand | /tree]" webpage as an alternative |
| 63 | 64 | to "/dir" and make it the default way of showing file lists. |
| 64 | 65 | * Send gzipped HTTP responses to clients that support it. |
| 65 | 66 | |
| @@ -118,11 +119,11 @@ | ||
| 118 | 119 | See |
| 119 | 120 | [http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-casesensitive] |
| 120 | 121 | * Enhancements to /timeline.rss, adding more flags for filtering |
| 121 | 122 | results, including the ability to subscribe to changes made |
| 122 | 123 | to individual tickets. For example: [/timeline.rss?y=t&tkt=12fceeec82]. |
| 123 | - * Improved handling of the differences between case-sensitive and | |
| 124 | + * Improved handling of the differences between case-sensitive and | |
| 124 | 125 | case-insensitive filesystems. |
| 125 | 126 | * JSON API: added the 'status' command to report local checkout status. |
| 126 | 127 | * Fixes to the <tt>--args</tt> support and documented this feature in the help. |
| 127 | 128 | * Added [/stats_report] page. |
| 128 | 129 | * Added <tt>ym=YYYY-MM</tt> filter to the [/timeline?ym=2013-06]. |
| @@ -136,15 +137,15 @@ | ||
| 136 | 137 | |
| 137 | 138 | <h2>Changes For Version 1.25 (2013-02-16)</h2> |
| 138 | 139 | * Enhancements to ticket processing. There are now two tables: TICKET and |
| 139 | 140 | TICKETCHNG. There is one row in TICKETCHNG for each ticket artifact. |
| 140 | 141 | Fields from ticket artifacts go into either or both of TICKET and |
| 141 | - TICKETCHNG, whichever contain matching column names. Default ticket | |
| 142 | + TICKETCHNG, whichever contain matching column names. Default ticket | |
| 142 | 143 | edit and viewing scripts are updated to use TICKETCHNG. The TH1 |
| 143 | 144 | scripting language is enhanced to support this, including the new |
| 144 | 145 | "query" command for doing SQL queries against the repository database. |
| 145 | - All changes should be backwards compatible. | |
| 146 | + All changes should be backwards compatible. | |
| 146 | 147 | * Add the ability to moderate ticket and wiki changes. Unmoderated changes |
| 147 | 148 | do not sync and may be deleted by the moderator if found to contain spam |
| 148 | 149 | or other objectionable content. |
| 149 | 150 | * Add javascript so that clicking on a node of the timeline graph selects |
| 150 | 151 | that node. Then clicking on a second node shows a diff between the |
| @@ -157,16 +158,16 @@ | ||
| 157 | 158 | * Add the "fossil cat" command which is basically an alias for |
| 158 | 159 | "fossil finfo -p". |
| 159 | 160 | * Hyperlinks with the class "button" are rendered as submenu buttons |
| 160 | 161 | on embedded documentation. |
| 161 | 162 | * The check-in comment editor on windows now defaults to NotePad.exe. |
| 162 | - * Correctly deal with BOMs in check-in comments. Also attempt to convert | |
| 163 | + * Correctly deal with BOMs in check-in comments. Also attempt to convert | |
| 163 | 164 | check-in comments to UTF8 from other encodings. |
| 164 | 165 | * Allow the deletion of multiple stash entries using multiple arguments |
| 165 | 166 | to the "fossil stash rm" command. |
| 166 | 167 | * Enhance the "fossil server DIRECTORY" command to serve static content |
| 167 | - files contained in DIRECTORY. For security, only files with a | |
| 168 | + files contained in DIRECTORY. For security, only files with a | |
| 168 | 169 | recognized suffix (such as *.html, *.jpg, *.txt, etc) will be delivered |
| 169 | 170 | as static content, and *.fossil files are not on the list of recognized |
| 170 | 171 | suffixes. There are additional restrictions on the names of the files. |
| 171 | 172 | * Allow the "fossil ui" command to specify a directory as long as the |
| 172 | 173 | the --notfound option is used. |
| @@ -189,11 +190,11 @@ | ||
| 189 | 190 | * Add options to "fossil commit" to override the various sanity checks. |
| 190 | 191 | Options added: --allow-empty, --allow-fork, --allow-older, and |
| 191 | 192 | --allow-conflict. |
| 192 | 193 | * Optionally require a CAPTCHA (controlled by a setting on the |
| 193 | 194 | Admin/Access webpage) when a user who is not logged in tries to |
| 194 | - edit wiki, or a ticket, or an attachment. | |
| 195 | + edit wiki, or a ticket, or an attachment. | |
| 195 | 196 | * Improvements to the "ssh://" sync protocol, to help it move past |
| 196 | 197 | noisey motd comments. |
| 197 | 198 | * Add the uf=FILE-SHA1-HASH query parameter to the timeline, causing the |
| 198 | 199 | timeline to show only check-ins that contain the specific file identified |
| 199 | 200 | by FILE-SHA1-HASH. ("uf" stands for "uses file".) |
| @@ -302,16 +303,16 @@ | ||
| 302 | 303 | * Added the "public-pages" glob pattern that can be configured to allow |
| 303 | 304 | anonymous users to see embedded documentation on sites where source |
| 304 | 305 | code should not be accessible to anonymous users. |
| 305 | 306 | * Allow multiple --tag options on the same "fossil commit" command. |
| 306 | 307 | * Change the meaning of the --bgcolor option for "fossil commit" to only |
| 307 | - change the color for that one commit. The new --branchcolor option | |
| 308 | + change the color for that one commit. The new --branchcolor option | |
| 308 | 309 | is available to set a persistent background color. |
| 309 | 310 | * Add the branch= query parameter to the vdiff page and the --branch option |
| 310 | 311 | to the "fossil diff" command. |
| 311 | 312 | * Check-in names of the form "root:BRANCH" now refer to the origin of |
| 312 | - the branch. Hence to see all changes in a branch, use | |
| 313 | + the branch. Hence to see all changes in a branch, use | |
| 313 | 314 | "fossil diff --from root:BRANCH --to BRANCH". The --branch option on |
| 314 | 315 | the diff command is an alias for the same. |
| 315 | 316 | * Add the ability to configure ad-units to be displayed between the menu |
| 316 | 317 | bar and the content. |
| 317 | 318 | * Add the ability to set a background image as part of server configuration. |
| @@ -318,18 +319,18 @@ | ||
| 318 | 319 | * Allow partial commits of cherrypick merges. |
| 319 | 320 | * Updates against an uncommitted merge are now a warning, not a fatal error. |
| 320 | 321 | * Prompt the user to continue if a check-in comment is unedited. |
| 321 | 322 | * Fixes to case sensitivity settings with the /dir webpage. |
| 322 | 323 | * Repositories now try to remember the locations of all checkouts and |
| 323 | - web-access URLs and display this information with the | |
| 324 | + web-access URLs and display this information with the | |
| 324 | 325 | "fossil info $REPO" command. |
| 325 | 326 | * Improved defense against spiders: The src= attribute of |
| 326 | 327 | <a> elements is set using javascript after the page loads. |
| 327 | 328 | * Enhanced formatting of the user list page. |
| 328 | 329 | * If a file named in "fossil add" is missing, that is now a warning instead |
| 329 | 330 | of a fatal error. |
| 330 | - * Fix side-by-side diff so that it displays correctly with | |
| 331 | + * Fix side-by-side diff so that it displays correctly with | |
| 331 | 332 | multi-byte UTF8 characters. |
| 332 | 333 | * Performance improvements in the diff logic. |
| 333 | 334 | * Other performance tweaks and documentation updates. |
| 334 | 335 | |
| 335 | 336 | <h2>Changes For Version 1.22 (2012-03-17)</h2> |
| @@ -338,11 +339,11 @@ | ||
| 338 | 339 | * Promote "allow-symlinks" to a versionable setting |
| 339 | 340 | * Harden the CGI processing logic against DOS attacks |
| 340 | 341 | * Add the ability to run TH1 scripts after sync requests |
| 341 | 342 | * Store the repository name in _FOSSIL_ as it is type in the "open" command, |
| 342 | 343 | possibly as a relative pathname. |
| 343 | - * Make ".fslckout" the alternative name for the "_FOSSIL_" file. | |
| 344 | + * Make ".fslckout" the alternative name for the "_FOSSIL_" file. | |
| 344 | 345 | * Change the "ssh:" transfer method to allow all access regardless of |
| 345 | 346 | user permission. |
| 346 | 347 | * Improvements to the timeline messages associated with tag changes. |
| 347 | 348 | (Requires a "[/help/rebuild | fossil rebuild]" to take effect.) |
| 348 | 349 | * Various additions and fixes for the JSON API. |
| @@ -352,17 +353,17 @@ | ||
| 352 | 353 | * Update to use SQLite version 3.7.11. |
| 353 | 354 | * Various minor bug fixes. |
| 354 | 355 | |
| 355 | 356 | <h2>Changes For Version 1.21 (2011-12-13)</h2> |
| 356 | 357 | * Added side-by-side diffs in the command-line interface |
| 357 | - * Automatically enable hyperlinks if the UserAgent string in the | |
| 358 | + * Automatically enable hyperlinks if the UserAgent string in the | |
| 358 | 359 | HTTP header suggests that the requestor is a human and not a bot. |
| 359 | 360 | * Show only commonly used commands with "fossil help". Use |
| 360 | 361 | "fossil help --all" to see the complete list now. |
| 361 | - * Improvements to the "stash" command: (1) Stash all files, not just | |
| 362 | - those below the working directory. (2) Add the --detail option to | |
| 363 | - "list". (3) Confirm before "drop --all". (4) Add the "help" | |
| 362 | + * Improvements to the "stash" command: (1) Stash all files, not just | |
| 363 | + those below the working directory. (2) Add the --detail option to | |
| 364 | + "list". (3) Confirm before "drop --all". (4) Add the "help" | |
| 364 | 365 | subcommand. |
| 365 | 366 | * Add an Admin/Access setting to change the number of octets of the |
| 366 | 367 | IP address that are saved in login cookies - allowing this setting |
| 367 | 368 | to be changed to zero |
| 368 | 369 | * Promote the "test-md5sum" command to "md5sum". |
| @@ -381,11 +382,11 @@ | ||
| 381 | 382 | * Added side-by-side diffs in HTML interface. [0bde74ea1e] |
| 382 | 383 | * Added support for symlinks. (Controlled by "allow-symlinks" setting, |
| 383 | 384 | off by default). [e4f1c1fe95] |
| 384 | 385 | * Fixed CLI annotate to show the proper file version in case there |
| 385 | 386 | are multiple equal versions in history. [e161670939] |
| 386 | - * Timeline now shows tag changes (requires rebuild).[87540ed6e6] | |
| 387 | + * Timeline now shows tag changes (requires rebuild).[87540ed6e6] | |
| 387 | 388 | * Fixed annotate to show "more relevant" versions of lines in |
| 388 | 389 | some cases. [e161670939] |
| 389 | 390 | * New command: ticket history. [98a855c508] |
| 390 | 391 | * Disabled SSLv2 in HTTPS client.[ea1d369d23] |
| 391 | 392 | * Fixed constant prompting regarding previously-saved SSL |
| @@ -396,11 +397,11 @@ | ||
| 396 | 397 | always identical for any given checkin. [e080560378] |
| 397 | 398 | * A number of minor HTML-related tweaks and fixes. |
| 398 | 399 | * Added --args FILENAME global CLI argument to import arbitrary |
| 399 | 400 | CLI arguments from a file (e.g. long file lists). [e080560378] |
| 400 | 401 | * Fixed significant memory leak in annotation of files with long |
| 401 | - histories.[9929bab702] | |
| 402 | + histories.[9929bab702] | |
| 402 | 403 | * Added warnings when a merge operation overwrites local copies |
| 403 | 404 | (UNDO is available, but previously this condition normally went |
| 404 | 405 | silently unnoticed). [39f979b08c] |
| 405 | 406 | * Improved performance when adding many files. [a369dc7721] |
| 406 | 407 | * Improve merges which contain many file renames. [0b93b0f958] |
| 407 | 408 |
| --- www/changes.wiki | |
| +++ www/changes.wiki | |
| @@ -7,10 +7,11 @@ | |
| 7 | * The [/reports] page now requires Read ("o") permissions. The "byweek" |
| 8 | report now properly propagates the selected year through the event type |
| 9 | filter links. |
| 10 | * The [/help/info | info command] now shows leaf status of the checkout. |
| 11 | * Add support for tunneling https through a http proxy (Ticket [e854101c4f]). |
| 12 | |
| 13 | <h2>Changes For Version 1.28 (2014-01-27)</h2> |
| 14 | * Enhance [/help?cmd=/reports | /reports] to support event type filtering. |
| 15 | * When cloning a repository, the user name passed via the URL (if any) |
| 16 | is now used as the default local admin user's name. |
| @@ -26,40 +27,40 @@ | |
| 26 | Admin/Configuration. |
| 27 | * Fix CGI processing so that it works on web servers that do not |
| 28 | supply REQUEST_URI. |
| 29 | * Add options --dirsonly, --emptydirs, and --allckouts to the |
| 30 | "[/help?cmd=clean | fossil clean]" command. |
| 31 | * Ten-fold performance improvement in large "fossil blame" or |
| 32 | "fossil annotate" commands. |
| 33 | * Add option -W|--width and --offset to "[/help?cmd=timeline | fossil timeline]" |
| 34 | and "[/help?cmd=finfo | fossil finfo]" commands. |
| 35 | * Option -n|--limit of "[/help?cmd=timeline | fossil timeline]" now |
| 36 | specifies the number of entries, just like all other commands which |
| 37 | have the -n|--limit option. The various timeline-related functions |
| 38 | now output "--- ?? limit (??) reached ---" at the end whenever |
| 39 | appropriate. Use "-n 0" if no limit is desired. |
| 40 | * Fix handling of password embedded in Fossil URL. |
| 41 | * New <tt>--once</tt> option to [/help?cmd=clone | fossil clone] command |
| 42 | which does not store the URL or password when cloning. |
| 43 | * Modify [/help?cmd=ui | fossil ui] to respect "default user" in an open |
| 44 | repository. |
| 45 | * Fossil now hides check-ins that have the "hidden" tag in timeline webpages. |
| 46 | * Enhance <tt>/ci_edit</tt> page to add the "hidden" tag to check-ins. |
| 47 | * Advanced possibilities for commit and ticket change notifications over |
| 48 | http using TH1 scripting. |
| 49 | * Add --sha1sum and --integrate options |
| 50 | to the "[/help?cmd=commit | fossil commit]" command. |
| 51 | * Add the "clean" and "extra" subcommands to the |
| 52 | "[/help?cmd=all | fossil all]" command |
| 53 | * Add the --whatif option to "[/help?cmd=clean|fossil clean]" that works the |
| 54 | same as "--dry-run", |
| 55 | so that the name does not collide with the --dry-run option of "fossil all". |
| 56 | * Provide a configuration option to show dates on the web timeline |
| 57 | as "YYMMMDD HH:MM" |
| 58 | * Add an option to the "stats" webpage that allows an administrator to see |
| 59 | the current repository schema. |
| 60 | * Enhancements to the "[/help?cmd=/vdiff|/vdiff]" webpage for more difference |
| 61 | display options. |
| 62 | * Added the "[/tree?ci=trunk&expand | /tree]" webpage as an alternative |
| 63 | to "/dir" and make it the default way of showing file lists. |
| 64 | * Send gzipped HTTP responses to clients that support it. |
| 65 | |
| @@ -118,11 +119,11 @@ | |
| 118 | See |
| 119 | [http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-casesensitive] |
| 120 | * Enhancements to /timeline.rss, adding more flags for filtering |
| 121 | results, including the ability to subscribe to changes made |
| 122 | to individual tickets. For example: [/timeline.rss?y=t&tkt=12fceeec82]. |
| 123 | * Improved handling of the differences between case-sensitive and |
| 124 | case-insensitive filesystems. |
| 125 | * JSON API: added the 'status' command to report local checkout status. |
| 126 | * Fixes to the <tt>--args</tt> support and documented this feature in the help. |
| 127 | * Added [/stats_report] page. |
| 128 | * Added <tt>ym=YYYY-MM</tt> filter to the [/timeline?ym=2013-06]. |
| @@ -136,15 +137,15 @@ | |
| 136 | |
| 137 | <h2>Changes For Version 1.25 (2013-02-16)</h2> |
| 138 | * Enhancements to ticket processing. There are now two tables: TICKET and |
| 139 | TICKETCHNG. There is one row in TICKETCHNG for each ticket artifact. |
| 140 | Fields from ticket artifacts go into either or both of TICKET and |
| 141 | TICKETCHNG, whichever contain matching column names. Default ticket |
| 142 | edit and viewing scripts are updated to use TICKETCHNG. The TH1 |
| 143 | scripting language is enhanced to support this, including the new |
| 144 | "query" command for doing SQL queries against the repository database. |
| 145 | All changes should be backwards compatible. |
| 146 | * Add the ability to moderate ticket and wiki changes. Unmoderated changes |
| 147 | do not sync and may be deleted by the moderator if found to contain spam |
| 148 | or other objectionable content. |
| 149 | * Add javascript so that clicking on a node of the timeline graph selects |
| 150 | that node. Then clicking on a second node shows a diff between the |
| @@ -157,16 +158,16 @@ | |
| 157 | * Add the "fossil cat" command which is basically an alias for |
| 158 | "fossil finfo -p". |
| 159 | * Hyperlinks with the class "button" are rendered as submenu buttons |
| 160 | on embedded documentation. |
| 161 | * The check-in comment editor on windows now defaults to NotePad.exe. |
| 162 | * Correctly deal with BOMs in check-in comments. Also attempt to convert |
| 163 | check-in comments to UTF8 from other encodings. |
| 164 | * Allow the deletion of multiple stash entries using multiple arguments |
| 165 | to the "fossil stash rm" command. |
| 166 | * Enhance the "fossil server DIRECTORY" command to serve static content |
| 167 | files contained in DIRECTORY. For security, only files with a |
| 168 | recognized suffix (such as *.html, *.jpg, *.txt, etc) will be delivered |
| 169 | as static content, and *.fossil files are not on the list of recognized |
| 170 | suffixes. There are additional restrictions on the names of the files. |
| 171 | * Allow the "fossil ui" command to specify a directory as long as the |
| 172 | the --notfound option is used. |
| @@ -189,11 +190,11 @@ | |
| 189 | * Add options to "fossil commit" to override the various sanity checks. |
| 190 | Options added: --allow-empty, --allow-fork, --allow-older, and |
| 191 | --allow-conflict. |
| 192 | * Optionally require a CAPTCHA (controlled by a setting on the |
| 193 | Admin/Access webpage) when a user who is not logged in tries to |
| 194 | edit wiki, or a ticket, or an attachment. |
| 195 | * Improvements to the "ssh://" sync protocol, to help it move past |
| 196 | noisey motd comments. |
| 197 | * Add the uf=FILE-SHA1-HASH query parameter to the timeline, causing the |
| 198 | timeline to show only check-ins that contain the specific file identified |
| 199 | by FILE-SHA1-HASH. ("uf" stands for "uses file".) |
| @@ -302,16 +303,16 @@ | |
| 302 | * Added the "public-pages" glob pattern that can be configured to allow |
| 303 | anonymous users to see embedded documentation on sites where source |
| 304 | code should not be accessible to anonymous users. |
| 305 | * Allow multiple --tag options on the same "fossil commit" command. |
| 306 | * Change the meaning of the --bgcolor option for "fossil commit" to only |
| 307 | change the color for that one commit. The new --branchcolor option |
| 308 | is available to set a persistent background color. |
| 309 | * Add the branch= query parameter to the vdiff page and the --branch option |
| 310 | to the "fossil diff" command. |
| 311 | * Check-in names of the form "root:BRANCH" now refer to the origin of |
| 312 | the branch. Hence to see all changes in a branch, use |
| 313 | "fossil diff --from root:BRANCH --to BRANCH". The --branch option on |
| 314 | the diff command is an alias for the same. |
| 315 | * Add the ability to configure ad-units to be displayed between the menu |
| 316 | bar and the content. |
| 317 | * Add the ability to set a background image as part of server configuration. |
| @@ -318,18 +319,18 @@ | |
| 318 | * Allow partial commits of cherrypick merges. |
| 319 | * Updates against an uncommitted merge are now a warning, not a fatal error. |
| 320 | * Prompt the user to continue if a check-in comment is unedited. |
| 321 | * Fixes to case sensitivity settings with the /dir webpage. |
| 322 | * Repositories now try to remember the locations of all checkouts and |
| 323 | web-access URLs and display this information with the |
| 324 | "fossil info $REPO" command. |
| 325 | * Improved defense against spiders: The src= attribute of |
| 326 | <a> elements is set using javascript after the page loads. |
| 327 | * Enhanced formatting of the user list page. |
| 328 | * If a file named in "fossil add" is missing, that is now a warning instead |
| 329 | of a fatal error. |
| 330 | * Fix side-by-side diff so that it displays correctly with |
| 331 | multi-byte UTF8 characters. |
| 332 | * Performance improvements in the diff logic. |
| 333 | * Other performance tweaks and documentation updates. |
| 334 | |
| 335 | <h2>Changes For Version 1.22 (2012-03-17)</h2> |
| @@ -338,11 +339,11 @@ | |
| 338 | * Promote "allow-symlinks" to a versionable setting |
| 339 | * Harden the CGI processing logic against DOS attacks |
| 340 | * Add the ability to run TH1 scripts after sync requests |
| 341 | * Store the repository name in _FOSSIL_ as it is type in the "open" command, |
| 342 | possibly as a relative pathname. |
| 343 | * Make ".fslckout" the alternative name for the "_FOSSIL_" file. |
| 344 | * Change the "ssh:" transfer method to allow all access regardless of |
| 345 | user permission. |
| 346 | * Improvements to the timeline messages associated with tag changes. |
| 347 | (Requires a "[/help/rebuild | fossil rebuild]" to take effect.) |
| 348 | * Various additions and fixes for the JSON API. |
| @@ -352,17 +353,17 @@ | |
| 352 | * Update to use SQLite version 3.7.11. |
| 353 | * Various minor bug fixes. |
| 354 | |
| 355 | <h2>Changes For Version 1.21 (2011-12-13)</h2> |
| 356 | * Added side-by-side diffs in the command-line interface |
| 357 | * Automatically enable hyperlinks if the UserAgent string in the |
| 358 | HTTP header suggests that the requestor is a human and not a bot. |
| 359 | * Show only commonly used commands with "fossil help". Use |
| 360 | "fossil help --all" to see the complete list now. |
| 361 | * Improvements to the "stash" command: (1) Stash all files, not just |
| 362 | those below the working directory. (2) Add the --detail option to |
| 363 | "list". (3) Confirm before "drop --all". (4) Add the "help" |
| 364 | subcommand. |
| 365 | * Add an Admin/Access setting to change the number of octets of the |
| 366 | IP address that are saved in login cookies - allowing this setting |
| 367 | to be changed to zero |
| 368 | * Promote the "test-md5sum" command to "md5sum". |
| @@ -381,11 +382,11 @@ | |
| 381 | * Added side-by-side diffs in HTML interface. [0bde74ea1e] |
| 382 | * Added support for symlinks. (Controlled by "allow-symlinks" setting, |
| 383 | off by default). [e4f1c1fe95] |
| 384 | * Fixed CLI annotate to show the proper file version in case there |
| 385 | are multiple equal versions in history. [e161670939] |
| 386 | * Timeline now shows tag changes (requires rebuild).[87540ed6e6] |
| 387 | * Fixed annotate to show "more relevant" versions of lines in |
| 388 | some cases. [e161670939] |
| 389 | * New command: ticket history. [98a855c508] |
| 390 | * Disabled SSLv2 in HTTPS client.[ea1d369d23] |
| 391 | * Fixed constant prompting regarding previously-saved SSL |
| @@ -396,11 +397,11 @@ | |
| 396 | always identical for any given checkin. [e080560378] |
| 397 | * A number of minor HTML-related tweaks and fixes. |
| 398 | * Added --args FILENAME global CLI argument to import arbitrary |
| 399 | CLI arguments from a file (e.g. long file lists). [e080560378] |
| 400 | * Fixed significant memory leak in annotation of files with long |
| 401 | histories.[9929bab702] |
| 402 | * Added warnings when a merge operation overwrites local copies |
| 403 | (UNDO is available, but previously this condition normally went |
| 404 | silently unnoticed). [39f979b08c] |
| 405 | * Improved performance when adding many files. [a369dc7721] |
| 406 | * Improve merges which contain many file renames. [0b93b0f958] |
| 407 |
| --- www/changes.wiki | |
| +++ www/changes.wiki | |
| @@ -7,10 +7,11 @@ | |
| 7 | * The [/reports] page now requires Read ("o") permissions. The "byweek" |
| 8 | report now properly propagates the selected year through the event type |
| 9 | filter links. |
| 10 | * The [/help/info | info command] now shows leaf status of the checkout. |
| 11 | * Add support for tunneling https through a http proxy (Ticket [e854101c4f]). |
| 12 | * Add option --empty to the "[/help?cmd=open | fossil open]" command. |
| 13 | |
| 14 | <h2>Changes For Version 1.28 (2014-01-27)</h2> |
| 15 | * Enhance [/help?cmd=/reports | /reports] to support event type filtering. |
| 16 | * When cloning a repository, the user name passed via the URL (if any) |
| 17 | is now used as the default local admin user's name. |
| @@ -26,40 +27,40 @@ | |
| 27 | Admin/Configuration. |
| 28 | * Fix CGI processing so that it works on web servers that do not |
| 29 | supply REQUEST_URI. |
| 30 | * Add options --dirsonly, --emptydirs, and --allckouts to the |
| 31 | "[/help?cmd=clean | fossil clean]" command. |
| 32 | * Ten-fold performance improvement in large "fossil blame" or |
| 33 | "fossil annotate" commands. |
| 34 | * Add option -W|--width and --offset to "[/help?cmd=timeline | fossil timeline]" |
| 35 | and "[/help?cmd=finfo | fossil finfo]" commands. |
| 36 | * Option -n|--limit of "[/help?cmd=timeline | fossil timeline]" now |
| 37 | specifies the number of entries, just like all other commands which |
| 38 | have the -n|--limit option. The various timeline-related functions |
| 39 | now output "--- ?? limit (??) reached ---" at the end whenever |
| 40 | appropriate. Use "-n 0" if no limit is desired. |
| 41 | * Fix handling of password embedded in Fossil URL. |
| 42 | * New <tt>--once</tt> option to [/help?cmd=clone | fossil clone] command |
| 43 | which does not store the URL or password when cloning. |
| 44 | * Modify [/help?cmd=ui | fossil ui] to respect "default user" in an open |
| 45 | repository. |
| 46 | * Fossil now hides check-ins that have the "hidden" tag in timeline webpages. |
| 47 | * Enhance <tt>/ci_edit</tt> page to add the "hidden" tag to check-ins. |
| 48 | * Advanced possibilities for commit and ticket change notifications over |
| 49 | http using TH1 scripting. |
| 50 | * Add --sha1sum and --integrate options |
| 51 | to the "[/help?cmd=commit | fossil commit]" command. |
| 52 | * Add the "clean" and "extra" subcommands to the |
| 53 | "[/help?cmd=all | fossil all]" command |
| 54 | * Add the --whatif option to "[/help?cmd=clean|fossil clean]" that works the |
| 55 | same as "--dry-run", |
| 56 | so that the name does not collide with the --dry-run option of "fossil all". |
| 57 | * Provide a configuration option to show dates on the web timeline |
| 58 | as "YYMMMDD HH:MM" |
| 59 | * Add an option to the "stats" webpage that allows an administrator to see |
| 60 | the current repository schema. |
| 61 | * Enhancements to the "[/help?cmd=/vdiff|/vdiff]" webpage for more difference |
| 62 | display options. |
| 63 | * Added the "[/tree?ci=trunk&expand | /tree]" webpage as an alternative |
| 64 | to "/dir" and make it the default way of showing file lists. |
| 65 | * Send gzipped HTTP responses to clients that support it. |
| 66 | |
| @@ -118,11 +119,11 @@ | |
| 119 | See |
| 120 | [http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-casesensitive] |
| 121 | * Enhancements to /timeline.rss, adding more flags for filtering |
| 122 | results, including the ability to subscribe to changes made |
| 123 | to individual tickets. For example: [/timeline.rss?y=t&tkt=12fceeec82]. |
| 124 | * Improved handling of the differences between case-sensitive and |
| 125 | case-insensitive filesystems. |
| 126 | * JSON API: added the 'status' command to report local checkout status. |
| 127 | * Fixes to the <tt>--args</tt> support and documented this feature in the help. |
| 128 | * Added [/stats_report] page. |
| 129 | * Added <tt>ym=YYYY-MM</tt> filter to the [/timeline?ym=2013-06]. |
| @@ -136,15 +137,15 @@ | |
| 137 | |
| 138 | <h2>Changes For Version 1.25 (2013-02-16)</h2> |
| 139 | * Enhancements to ticket processing. There are now two tables: TICKET and |
| 140 | TICKETCHNG. There is one row in TICKETCHNG for each ticket artifact. |
| 141 | Fields from ticket artifacts go into either or both of TICKET and |
| 142 | TICKETCHNG, whichever contain matching column names. Default ticket |
| 143 | edit and viewing scripts are updated to use TICKETCHNG. The TH1 |
| 144 | scripting language is enhanced to support this, including the new |
| 145 | "query" command for doing SQL queries against the repository database. |
| 146 | All changes should be backwards compatible. |
| 147 | * Add the ability to moderate ticket and wiki changes. Unmoderated changes |
| 148 | do not sync and may be deleted by the moderator if found to contain spam |
| 149 | or other objectionable content. |
| 150 | * Add javascript so that clicking on a node of the timeline graph selects |
| 151 | that node. Then clicking on a second node shows a diff between the |
| @@ -157,16 +158,16 @@ | |
| 158 | * Add the "fossil cat" command which is basically an alias for |
| 159 | "fossil finfo -p". |
| 160 | * Hyperlinks with the class "button" are rendered as submenu buttons |
| 161 | on embedded documentation. |
| 162 | * The check-in comment editor on windows now defaults to NotePad.exe. |
| 163 | * Correctly deal with BOMs in check-in comments. Also attempt to convert |
| 164 | check-in comments to UTF8 from other encodings. |
| 165 | * Allow the deletion of multiple stash entries using multiple arguments |
| 166 | to the "fossil stash rm" command. |
| 167 | * Enhance the "fossil server DIRECTORY" command to serve static content |
| 168 | files contained in DIRECTORY. For security, only files with a |
| 169 | recognized suffix (such as *.html, *.jpg, *.txt, etc) will be delivered |
| 170 | as static content, and *.fossil files are not on the list of recognized |
| 171 | suffixes. There are additional restrictions on the names of the files. |
| 172 | * Allow the "fossil ui" command to specify a directory as long as the |
| 173 | the --notfound option is used. |
| @@ -189,11 +190,11 @@ | |
| 190 | * Add options to "fossil commit" to override the various sanity checks. |
| 191 | Options added: --allow-empty, --allow-fork, --allow-older, and |
| 192 | --allow-conflict. |
| 193 | * Optionally require a CAPTCHA (controlled by a setting on the |
| 194 | Admin/Access webpage) when a user who is not logged in tries to |
| 195 | edit wiki, or a ticket, or an attachment. |
| 196 | * Improvements to the "ssh://" sync protocol, to help it move past |
| 197 | noisey motd comments. |
| 198 | * Add the uf=FILE-SHA1-HASH query parameter to the timeline, causing the |
| 199 | timeline to show only check-ins that contain the specific file identified |
| 200 | by FILE-SHA1-HASH. ("uf" stands for "uses file".) |
| @@ -302,16 +303,16 @@ | |
| 303 | * Added the "public-pages" glob pattern that can be configured to allow |
| 304 | anonymous users to see embedded documentation on sites where source |
| 305 | code should not be accessible to anonymous users. |
| 306 | * Allow multiple --tag options on the same "fossil commit" command. |
| 307 | * Change the meaning of the --bgcolor option for "fossil commit" to only |
| 308 | change the color for that one commit. The new --branchcolor option |
| 309 | is available to set a persistent background color. |
| 310 | * Add the branch= query parameter to the vdiff page and the --branch option |
| 311 | to the "fossil diff" command. |
| 312 | * Check-in names of the form "root:BRANCH" now refer to the origin of |
| 313 | the branch. Hence to see all changes in a branch, use |
| 314 | "fossil diff --from root:BRANCH --to BRANCH". The --branch option on |
| 315 | the diff command is an alias for the same. |
| 316 | * Add the ability to configure ad-units to be displayed between the menu |
| 317 | bar and the content. |
| 318 | * Add the ability to set a background image as part of server configuration. |
| @@ -318,18 +319,18 @@ | |
| 319 | * Allow partial commits of cherrypick merges. |
| 320 | * Updates against an uncommitted merge are now a warning, not a fatal error. |
| 321 | * Prompt the user to continue if a check-in comment is unedited. |
| 322 | * Fixes to case sensitivity settings with the /dir webpage. |
| 323 | * Repositories now try to remember the locations of all checkouts and |
| 324 | web-access URLs and display this information with the |
| 325 | "fossil info $REPO" command. |
| 326 | * Improved defense against spiders: The src= attribute of |
| 327 | <a> elements is set using javascript after the page loads. |
| 328 | * Enhanced formatting of the user list page. |
| 329 | * If a file named in "fossil add" is missing, that is now a warning instead |
| 330 | of a fatal error. |
| 331 | * Fix side-by-side diff so that it displays correctly with |
| 332 | multi-byte UTF8 characters. |
| 333 | * Performance improvements in the diff logic. |
| 334 | * Other performance tweaks and documentation updates. |
| 335 | |
| 336 | <h2>Changes For Version 1.22 (2012-03-17)</h2> |
| @@ -338,11 +339,11 @@ | |
| 339 | * Promote "allow-symlinks" to a versionable setting |
| 340 | * Harden the CGI processing logic against DOS attacks |
| 341 | * Add the ability to run TH1 scripts after sync requests |
| 342 | * Store the repository name in _FOSSIL_ as it is type in the "open" command, |
| 343 | possibly as a relative pathname. |
| 344 | * Make ".fslckout" the alternative name for the "_FOSSIL_" file. |
| 345 | * Change the "ssh:" transfer method to allow all access regardless of |
| 346 | user permission. |
| 347 | * Improvements to the timeline messages associated with tag changes. |
| 348 | (Requires a "[/help/rebuild | fossil rebuild]" to take effect.) |
| 349 | * Various additions and fixes for the JSON API. |
| @@ -352,17 +353,17 @@ | |
| 353 | * Update to use SQLite version 3.7.11. |
| 354 | * Various minor bug fixes. |
| 355 | |
| 356 | <h2>Changes For Version 1.21 (2011-12-13)</h2> |
| 357 | * Added side-by-side diffs in the command-line interface |
| 358 | * Automatically enable hyperlinks if the UserAgent string in the |
| 359 | HTTP header suggests that the requestor is a human and not a bot. |
| 360 | * Show only commonly used commands with "fossil help". Use |
| 361 | "fossil help --all" to see the complete list now. |
| 362 | * Improvements to the "stash" command: (1) Stash all files, not just |
| 363 | those below the working directory. (2) Add the --detail option to |
| 364 | "list". (3) Confirm before "drop --all". (4) Add the "help" |
| 365 | subcommand. |
| 366 | * Add an Admin/Access setting to change the number of octets of the |
| 367 | IP address that are saved in login cookies - allowing this setting |
| 368 | to be changed to zero |
| 369 | * Promote the "test-md5sum" command to "md5sum". |
| @@ -381,11 +382,11 @@ | |
| 382 | * Added side-by-side diffs in HTML interface. [0bde74ea1e] |
| 383 | * Added support for symlinks. (Controlled by "allow-symlinks" setting, |
| 384 | off by default). [e4f1c1fe95] |
| 385 | * Fixed CLI annotate to show the proper file version in case there |
| 386 | are multiple equal versions in history. [e161670939] |
| 387 | * Timeline now shows tag changes (requires rebuild).[87540ed6e6] |
| 388 | * Fixed annotate to show "more relevant" versions of lines in |
| 389 | some cases. [e161670939] |
| 390 | * New command: ticket history. [98a855c508] |
| 391 | * Disabled SSLv2 in HTTPS client.[ea1d369d23] |
| 392 | * Fixed constant prompting regarding previously-saved SSL |
| @@ -396,11 +397,11 @@ | |
| 397 | always identical for any given checkin. [e080560378] |
| 398 | * A number of minor HTML-related tweaks and fixes. |
| 399 | * Added --args FILENAME global CLI argument to import arbitrary |
| 400 | CLI arguments from a file (e.g. long file lists). [e080560378] |
| 401 | * Fixed significant memory leak in annotation of files with long |
| 402 | histories.[9929bab702] |
| 403 | * Added warnings when a merge operation overwrites local copies |
| 404 | (UNDO is available, but previously this condition normally went |
| 405 | silently unnoticed). [39f979b08c] |
| 406 | * Improved performance when adding many files. [a369dc7721] |
| 407 | * Improve merges which contain many file renames. [0b93b0f958] |
| 408 |
+21
-21
| --- www/fileformat.wiki | ||
| +++ www/fileformat.wiki | ||
| @@ -138,31 +138,31 @@ | ||
| 138 | 138 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><br> |
| 139 | 139 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><b>.</b><i>SSS</i> |
| 140 | 140 | </blockquote> |
| 141 | 141 | |
| 142 | 142 | A manifest has zero or more F-cards. Each F-card identifies a file |
| 143 | -that is part of the check-in. There are one, two, three, or four arguments. | |
| 144 | -The first argument | |
| 145 | -is the pathname of the file in the check-in relative to the root | |
| 146 | -of the project file hierarchy. No ".." or "." directories are allowed | |
| 147 | -within the filename. Space characters are escaped as in C-card | |
| 148 | -comment text. Backslash characters and newlines are not allowed | |
| 149 | -within filenames. The directory separator character is a forward | |
| 150 | -slash (ASCII 0x2F). The second argument to the F-card is the | |
| 151 | -full 40-character lower-case hexadecimal SHA1 hash of the content | |
| 152 | -artifact. The second argument is required for baseline manifests | |
| 153 | -but is optional for delta manifests. When the second argument to the | |
| 154 | -F-card is omitted, it means that the file has been deleted relative | |
| 155 | -to the baseline. The optional 3rd argument defines any special access | |
| 156 | -permissions associated with the file. The only special code currently | |
| 157 | -defined is "x" which means that the file is executable. All files are | |
| 158 | -always readable and writable. This can be expressed by "w" permission | |
| 159 | -if desired but is optional. The file format might be extended with | |
| 160 | -new permission letters in the future. | |
| 161 | -The optional 4th argument is the name of the same file as it existed in | |
| 162 | -the parent check-in. If the name of the file is unchanged from its | |
| 163 | -parent, then the 4th argument is omitted. | |
| 143 | +that is part of the check-in. There are one, two, three, or four | |
| 144 | +arguments. The first argument is the pathname of the file in the | |
| 145 | +check-in relative to the root of the project file hierarchy. No ".." | |
| 146 | +or "." directories are allowed within the filename. Space characters | |
| 147 | +are escaped as in C-card comment text. Backslash characters and | |
| 148 | +newlines are not allowed within filenames. The directory separator | |
| 149 | +character is a forward slash (ASCII 0x2F). The second argument to the | |
| 150 | +F-card is the full 40-character lower-case hexadecimal SHA1 hash of | |
| 151 | +the content artifact. The second argument is required for baseline | |
| 152 | +manifests but is optional for delta manifests. When the second | |
| 153 | +argument to the F-card is omitted, it means that the file has been | |
| 154 | +deleted relative to the baseline (files removed in baseline manifests | |
| 155 | +versions are <em>not</em> added as F-cards). The optional 3rd argument | |
| 156 | +defines any special access permissions associated with the file. This | |
| 157 | +can be defined as "x" to mean that the file is executable or "l" | |
| 158 | +(small letter ell) to mean a symlink. All files are always readable | |
| 159 | +and writable. This can be expressed by "w" permission if desired but | |
| 160 | +is optional. The file format might be extended with new permission | |
| 161 | +letters in the future. The optional 4th argument is the name of the | |
| 162 | +same file as it existed in the parent check-in. If the name of the | |
| 163 | +file is unchanged from its parent, then the 4th argument is omitted. | |
| 164 | 164 | |
| 165 | 165 | A manifest has zero or one N-cards. The N-card specifies the mimetype for the |
| 166 | 166 | text in the comment of the C-card. If the N-card is omitted, a default mimetype |
| 167 | 167 | is used. |
| 168 | 168 | |
| 169 | 169 |
| --- www/fileformat.wiki | |
| +++ www/fileformat.wiki | |
| @@ -138,31 +138,31 @@ | |
| 138 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><br> |
| 139 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><b>.</b><i>SSS</i> |
| 140 | </blockquote> |
| 141 | |
| 142 | A manifest has zero or more F-cards. Each F-card identifies a file |
| 143 | that is part of the check-in. There are one, two, three, or four arguments. |
| 144 | The first argument |
| 145 | is the pathname of the file in the check-in relative to the root |
| 146 | of the project file hierarchy. No ".." or "." directories are allowed |
| 147 | within the filename. Space characters are escaped as in C-card |
| 148 | comment text. Backslash characters and newlines are not allowed |
| 149 | within filenames. The directory separator character is a forward |
| 150 | slash (ASCII 0x2F). The second argument to the F-card is the |
| 151 | full 40-character lower-case hexadecimal SHA1 hash of the content |
| 152 | artifact. The second argument is required for baseline manifests |
| 153 | but is optional for delta manifests. When the second argument to the |
| 154 | F-card is omitted, it means that the file has been deleted relative |
| 155 | to the baseline. The optional 3rd argument defines any special access |
| 156 | permissions associated with the file. The only special code currently |
| 157 | defined is "x" which means that the file is executable. All files are |
| 158 | always readable and writable. This can be expressed by "w" permission |
| 159 | if desired but is optional. The file format might be extended with |
| 160 | new permission letters in the future. |
| 161 | The optional 4th argument is the name of the same file as it existed in |
| 162 | the parent check-in. If the name of the file is unchanged from its |
| 163 | parent, then the 4th argument is omitted. |
| 164 | |
| 165 | A manifest has zero or one N-cards. The N-card specifies the mimetype for the |
| 166 | text in the comment of the C-card. If the N-card is omitted, a default mimetype |
| 167 | is used. |
| 168 | |
| 169 |
| --- www/fileformat.wiki | |
| +++ www/fileformat.wiki | |
| @@ -138,31 +138,31 @@ | |
| 138 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><br> |
| 139 | <i>YYYY</i><b>-</b><i>MM</i><b>-</b><i>DD</i><b>T</b><i>HH</i><b>:</b><i>MM</i><b>:</b><i>SS</i><b>.</b><i>SSS</i> |
| 140 | </blockquote> |
| 141 | |
| 142 | A manifest has zero or more F-cards. Each F-card identifies a file |
| 143 | that is part of the check-in. There are one, two, three, or four |
| 144 | arguments. The first argument is the pathname of the file in the |
| 145 | check-in relative to the root of the project file hierarchy. No ".." |
| 146 | or "." directories are allowed within the filename. Space characters |
| 147 | are escaped as in C-card comment text. Backslash characters and |
| 148 | newlines are not allowed within filenames. The directory separator |
| 149 | character is a forward slash (ASCII 0x2F). The second argument to the |
| 150 | F-card is the full 40-character lower-case hexadecimal SHA1 hash of |
| 151 | the content artifact. The second argument is required for baseline |
| 152 | manifests but is optional for delta manifests. When the second |
| 153 | argument to the F-card is omitted, it means that the file has been |
| 154 | deleted relative to the baseline (files removed in baseline manifests |
| 155 | versions are <em>not</em> added as F-cards). The optional 3rd argument |
| 156 | defines any special access permissions associated with the file. This |
| 157 | can be defined as "x" to mean that the file is executable or "l" |
| 158 | (small letter ell) to mean a symlink. All files are always readable |
| 159 | and writable. This can be expressed by "w" permission if desired but |
| 160 | is optional. The file format might be extended with new permission |
| 161 | letters in the future. The optional 4th argument is the name of the |
| 162 | same file as it existed in the parent check-in. If the name of the |
| 163 | file is unchanged from its parent, then the 4th argument is omitted. |
| 164 | |
| 165 | A manifest has zero or one N-cards. The N-card specifies the mimetype for the |
| 166 | text in the comment of the C-card. If the N-card is omitted, a default mimetype |
| 167 | is used. |
| 168 | |
| 169 |