Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the "fossil backup" command to safely make a backup copy of a repository. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
aadbe015dfa56542f9338634623dbca1 |
User & Date: | drh 2020-07-12 19:11:35 |
Context
2020-07-13
| ||
12:49 | Small typo fix in the change log. ... (check-in: cfbfdd1e user: stephan tags: trunk) | |
2020-07-12
| ||
19:11 | Add the "fossil backup" command to safely make a backup copy of a repository. ... (check-in: aadbe015 user: drh tags: trunk) | |
18:36 | Merge the (still experimental) hooks implementation onto trunk. ... (check-in: 9d8db79c user: drh tags: trunk) | |
Changes
Changes to src/allrepo.c.
︙ | ︙ | |||
60 61 62 63 64 65 66 67 68 69 70 71 72 73 | ** that can be useful before or after a period of disconnected operation. ** ** On Win32 systems, the file is named "_fossil" and is located in ** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%. ** ** Available operations are: ** ** cache Manages the cache used for potentially expensive web ** pages. Any additional arguments are passed on verbatim ** to the cache command. ** ** changes Shows all local checkouts that have uncommitted changes. ** This operation has no additional options. ** | > > > | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | ** that can be useful before or after a period of disconnected operation. ** ** On Win32 systems, the file is named "_fossil" and is located in ** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%. ** ** Available operations are: ** ** backup Backup all repositories. The argument must the name of ** a directory into which all backup repositories are written. ** ** cache Manages the cache used for potentially expensive web ** pages. Any additional arguments are passed on verbatim ** to the cache command. ** ** changes Shows all local checkouts that have uncommitted changes. ** This operation has no additional options. ** |
︙ | ︙ | |||
172 173 174 175 176 177 178 179 180 181 182 183 184 185 | g.argv[2] = "/"; cmd_webserver(); return; } if( strncmp(zCmd, "list", n)==0 || strncmp(zCmd,"ls",n)==0 ){ zCmd = "list"; useCheckouts = find_option("ckout","c",0)!=0; }else if( strncmp(zCmd, "clean", n)==0 ){ zCmd = "clean --chdir"; collect_argument(&extra, "allckouts",0); collect_argument_value(&extra, "case-sensitive"); collect_argument_value(&extra, "clean"); collect_argument(&extra, "dirsonly",0); collect_argument(&extra, "disable-undo",0); | > > > > > > > > > > | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | g.argv[2] = "/"; cmd_webserver(); return; } if( strncmp(zCmd, "list", n)==0 || strncmp(zCmd,"ls",n)==0 ){ zCmd = "list"; useCheckouts = find_option("ckout","c",0)!=0; }else if( strncmp(zCmd, "backup", n)==0 ){ char *zDest; zCmd = "backup -R"; collect_argument(&extra, "overwrite",0); if( g.argc!=4 ) usage("backup DIRECTORY"); zDest = g.argv[3]; if( file_isdir(zDest, ExtFILE)!=1 ){ fossil_fatal("argument to \"fossil all backup\" must be a directory"); } blob_appendf(&extra, " %$", zDest); }else if( strncmp(zCmd, "clean", n)==0 ){ zCmd = "clean --chdir"; collect_argument(&extra, "allckouts",0); collect_argument_value(&extra, "case-sensitive"); collect_argument_value(&extra, "clean"); collect_argument(&extra, "dirsonly",0); collect_argument(&extra, "disable-undo",0); |
︙ | ︙ |
Changes to src/sync.c.
︙ | ︙ | |||
385 386 387 388 389 390 391 | fossil_print("off\n"); return; }else{ url_parse(zUrl, 0); fossil_print("%s\n", g.url.canonical); } } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 | fossil_print("off\n"); return; }else{ url_parse(zUrl, 0); fossil_print("%s\n", g.url.canonical); } } /* ** COMMAND: backup* ** ** Usage: %fossil backup ?OPTIONS? FILE|DIRECTORY ** ** Make a backup of the repository into the named file or into the named ** directory. This backup is guaranteed to be consistent even if there are ** concurrent chnages taking place on the repository. In other words, it ** is safe to run "fossil backup" on a repository that is in active use. ** ** Only the main repository database is backed up by this command. The ** open checkout file (if any) is not saved. Nor is the global configuration ** database. ** ** Options: ** ** --overwrite Ok to overwrite an existing file. ** -R NAME Filename of the repository to backup */ void backup_cmd(void){ char *zDest; int bOverwrite = 0; db_find_and_open_repository(OPEN_ANY_SCHEMA, 0); bOverwrite = find_option("overwrite",0,0)!=0; verify_all_options(); if( g.argc!=3 ){ usage("FILE|DIRECTORY"); } zDest = g.argv[2]; if( file_isdir(zDest, ExtFILE)==1 ){ zDest = mprintf("%s/%s", zDest, file_tail(g.zRepositoryName)); } if( file_isfile(zDest, ExtFILE) ){ if( bOverwrite ){ if( file_delete(zDest) ){ fossil_fatal("unable to delete old copy of \"%s\"", zDest); } }else{ fossil_fatal("backup \"%s\" already exists", zDest); } } db_multi_exec("VACUUM repository INTO %Q", zDest); } |