summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 08:06:55 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 08:06:55 +0000
commit53eae96af143d6a1cf997187f61ab91895e93c45 (patch)
tree05509dbf11fbcde9b0e5273fad062cf3d4476096
parent1175c0e673ef2119eca3f884bcdeee36f1ffb2be (diff)
automatic import of python-backupyopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-backupy.spec702
-rw-r--r--sources1
3 files changed, 704 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..06b0c35 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/BackuPy-1.10.1.tar.gz
diff --git a/python-backupy.spec b/python-backupy.spec
new file mode 100644
index 0000000..72c8847
--- /dev/null
+++ b/python-backupy.spec
@@ -0,0 +1,702 @@
+%global _empty_manifest_terminate_build 0
+Name: python-BackuPy
+Version: 1.10.1
+Release: 1
+Summary: A simple backup program in python with an emphasis on data integrity and transparent behaviour
+License: GPLv3
+URL: https://github.com/elesiuta/backupy
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/19/ac/b180f7cf228ad9ec06b28acfe33c46c138717241cb19286a5f61d2e3d506/BackuPy-1.10.1.tar.gz
+BuildArch: noarch
+
+
+%description
+# [BackuPy](#backupy)
+ - [Installation](#installation)
+ - [Features](#features)
+ - [Design Goals](#design-goals)
+ - [Usage Description](#usage-description)
+ - [Command Line Interface](#command-line-interface)
+ - [Configuration File](#configuration-file)
+ - [Building From Source](#building-from-source)
+## [Installation](#installation)
+- Install the latest release from PyPI (supports all platforms with Python and has no dependencies outside the standard library)
+```
+pip install backupy --upgrade
+```
+## [Features](#features)
+- Backup, Mirror, and Sync Modes
+- Compare files using attributes or CRCs
+- View changed file tree with curses
+- Detection and alerts of corrupted files
+- Detection and alerts of unexpected file modifications on destination outside of backups and mirrors, or sync conflicts (a file was modified on both sides since the last sync)
+- JSON formatted database for tracking files and CSV formatted logs
+- Filter files with regular expressions
+- Files are always safe by default, being moved to an identically structured archive directory before being deleted or overwritten
+## [Design Goals](#design-goals)
+- Backups should be future proof and verifiable, even without BackuPy
+ - uses [file-based increments](https://wiki.archlinux.org/index.php/Synchronization_and_backup_programs#File-based_increments) and human readable database/log files that are also easy to parse
+- Code should be simple and easy to verify to ensure predicable and reliable operation
+ - a callgraph is available in `analysis/callgraph.svg`
+ - there are only three, easy to follow functions (under `FileManager` in `backupy/fileman.py`) that ever touch your files, no more, no less, three shall be the number of thou functions, and the number of the functions shall be three
+ - use trustworthy dependencies
+- Follow the principle of least astonishment
+ - clear backup behaviour between directories, the current status of files and how they will be handled upon execution should be perfectly obvious
+- Avoid feature creep and duplicating other programs
+ - no delta-transfer (extend with another backend)
+ - no network storage or FUSE support (these must be mounted by another program for BackuPy to see them)
+ - no backup encryption (use encrypted storage)
+ - no filesystem monitoring (this is not a continuous backup/sync program)
+- Easily extensible with other backends
+ - all the low level functions used for file operations are under `FileOps` from `backupy.utils` for easy monkey patching (see `example_extension.py`)
+## [Usage Description](#usage-description)
+- Source and destination directories can be any directory accessible via the computer's file system
+ - Destination can be empty or contain files from a previous backup (even one made without BackuPy), matching files on both sides will be skipped
+ - Use the `--posix` flag if you plan on using BackuPy between Windows and any other OS
+- `Main modes` (how to handle new and deleted files)
+ - `Backup mode:` copies files that are only in source to destination
+ - `Mirror mode:` copies files that are only in source to destination and deletes files that are only in destination
+ - `Sync mode:` copies files that are only in source to destination and copies files that are only in destination to source
+ - you may also want to use `--sync-delete` to propagate deletions
+ - see `write_database_x2` in the [configuration file](#configuration-file) if syncing more than two folders
+- `Selection modes` (which file to select in cases where different versions exist on both sides)
+ - `Source mode:` copy source files to destination
+ - `Destination mode:` copy destination files to source
+ - `Newer mode:` copy newer files based on last modified time
+ - `None mode:` don't copy either, differing files will only be logged for manual intervention
+- `Compare modes` (how to detect which files have changed)
+ - `Attribute mode:` compare file attributes (size and last modified time)
+ - `Attribute+ mode:` compare file attributes and calculate CRCs only for new and changed files for future verification
+ - `CRC mode:` compare file attributes and CRC for every file, and checks previously stored CRCs to detect corruption
+ - you may also want to use `--verify` to verify the CRC of files after they're copied
+- Test your options first with the `--dry-run` flag
+- See [Command Line Interface](#command-line-interface) and [Configuration File](#configuration-file) below for all available options
+- By default, you will always be notified of any changes, unexpected modifications, sync conflicts, or file corruption before being prompted to continue, cancel, or skip selected files
+ - it is recommended to use `--qconflicts` if using `--noprompt`, especially if also using `--noarchive`
+- By default, you will be prompted before any changes are made to your files and
+ - overwritten files will be moved to `<source|dest>/.backupy/Archives/yymmdd-HHMM/<original path>`
+ - deleted files will be moved to `<source|dest>/.backupy/Trash/yymmdd-HHMM/<original path>`
+- Symbolic links to folders are never followed and always copied verbatim
+- Symbolic links to files are followed by default, copying the referenced file, use `--nofollow` to copy symbolic links to files verbatim
+- To restore files, just copy them over from your destination to source (or swap source and destination in BackuPy)
+## [Command Line Interface](#command-line-interface)
+```
+usage: backupy [options] -- <source> <dest>
+ backupy <source> <dest> [options]
+ backupy <source> --load [-c mode] [--dbscan] [--dry-run]
+ backupy -h | --help | --version
+
+positional arguments:
+ source Path to source
+ dest Path to destination
+
+optional arguments:
+ -h, --help show this help message and exit
+ --version show program's version number and exit
+
+file mode options:
+
+ -m mode Main mode: for files that exist only on one side
+ MIRROR (default)
+ [source-only -> destination, delete destination-only]
+ BACKUP
+ [source-only -> destination, keep destination-only]
+ SYNC
+ [source-only -> destination, destination-only -> source]
+ -s mode Selection mode: for files that exist on both sides but differ
+ SOURCE (default)
+ [copy source to destination]
+ DEST
+ [copy destination to source]
+ NEW
+ [copy newer to opposite side]
+ NO
+ [do nothing]
+ -c mode Compare mode: for detecting which files differ
+ ATTR (default)
+ [compare file attributes: mod-time and size]
+ ATTR+
+ [compare file attributes and record CRC for changed files]
+ CRC
+ [compare file attributes and CRC for every file]
+
+misc file options:
+
+ --sync-delete
+ Use the database to propagate deletions since the last sync
+ --fi regex [regex ...]
+ Filter: Only include files matching the regular expression(s)
+ (include all by default, searches file paths)
+ --fe regex [regex ...]
+ Filter: Exclude files matching the regular expression(s)
+ (exclude has priority over include, searches file paths)
+ --noarchive Disable archiving files before overwriting/deleting to:
+ <source|dest>/.backupy/Archives/yymmdd-HHMM/
+ <source|dest>/.backupy/Trash/yymmdd-HHMM/
+ --nofollow Do not follow symlinks when copying files
+ --nomoves Do not detect when files are moved or renamed
+
+execution options:
+
+ --noprompt Complete run without prompting for confirmation
+ -d, --dbscan
+ Only scan files to check and update their database entries
+ -n, --dry-run
+ Perform a dry run with no changes made to your files
+ -q, --qconflicts
+ Quit if database conflicts are detected (always notified)
+ -> unexpected changes on destination (backup and mirror)
+ -> sync conflict (file modified on both sides since last sync)
+ -> file corruption (ATTR+ or CRC compare modes)
+ -v, --verify
+ Verify CRC of copied files
+
+backend options (experimental):
+
+ --cold Do not scan files on destination and only use local databases
+ --rsync Use rsync for copying files
+
+configuration options:
+
+ --nolog Disable writing log and file databases to:
+ <source>/.backupy/Logs/log-yymmdd-HHMM.csv
+ <source|dest>/.backupy/database.json
+ -p, --posix Force posix style paths on non-posix operating systems
+ -k, --save Save configuration to <source>/.backupy/config.json and exit
+ -l, --load Load configuration from <source>/.backupy/config.json and run
+
+BackuPy is a simple backup program in python with an emphasis on data
+integrity and transparent behaviour - https://github.com/elesiuta/backupy
+
+BackuPy comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
+welcome to redistribute it under certain conditions. See the GNU General
+Public Licence for details.
+```
+## [Configuration File](#configuration-file)
+- The config file is saved to, and loaded from `<source>/.backupy/config.json`
+ - it contains all the options from the command line interface along with some additional options
+ - the only CLI options that can be used with `--load` and can override settings in `config.json` are `-c mode`, `--dbscan`, and `--dry-run`
+ - the overrides can enable `--dbscan` or `--dry-run` but not disable
+ - see `backupy/config.py` for where all the options and defaults are stored in code
+ - below is a description of all the other options that are available
+- `source_unique_id` & `dest_unique_id`
+ - unique id for each folder, used when `write_database_x2` is enabled, each assigned a random string by default
+- `archive_dir` = ".backupy/Archive"
+ - can be any subdirectory
+- `config_dir` = ".backupy"
+ - can't be changed under normal operation
+- `log_dir` = ".backupy/Logs"
+ - can be any subdirectory
+- `trash_dir` = ".backupy/Trash"
+ - can be any subdirectory
+- `cleanup_empty_dirs` = True
+ - delete directories when they become empty
+- `root_alias_log` = True
+ - abbreviate absolute paths to source and dest with `<source>` and `<dest>` in logs
+- `stdout_status_bar` = True
+ - show progress status bar
+- `verbose` = True
+ - print list of differences between directories to stdout
+- `write_database_x2` = False
+ - write both source and destination databases to each side using their `unique_id`, useful for syncing groups of more than two folders or with the `--sync-delete` flag
+- `write_log_dest` = False
+ - write a copy of the log to `<dest>/<log_dir>/log-yymmdd-HHMM-dest.csv`
+- `write_log_summary` = False
+ - alternative log structure, written in addition to standard log
+- `nocolour` = False
+ - disable colour when printing to stdout
+## [Building From Source](#building-from-source)
+- Run tests with
+```
+python setup.py test
+```
+- Building a python package
+```
+python setup.py sdist
+```
+- Building an executable with the GUI (depends on [Gooey](https://pypi.org/project/Gooey/)) (deprecated, may rewrite with flutter)
+```
+pyinstaller build.spec
+```
+- You can package the executable on Windows by running setup.iss with Inno Setup
+
+
+
+
+%package -n python3-BackuPy
+Summary: A simple backup program in python with an emphasis on data integrity and transparent behaviour
+Provides: python-BackuPy
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-BackuPy
+# [BackuPy](#backupy)
+ - [Installation](#installation)
+ - [Features](#features)
+ - [Design Goals](#design-goals)
+ - [Usage Description](#usage-description)
+ - [Command Line Interface](#command-line-interface)
+ - [Configuration File](#configuration-file)
+ - [Building From Source](#building-from-source)
+## [Installation](#installation)
+- Install the latest release from PyPI (supports all platforms with Python and has no dependencies outside the standard library)
+```
+pip install backupy --upgrade
+```
+## [Features](#features)
+- Backup, Mirror, and Sync Modes
+- Compare files using attributes or CRCs
+- View changed file tree with curses
+- Detection and alerts of corrupted files
+- Detection and alerts of unexpected file modifications on destination outside of backups and mirrors, or sync conflicts (a file was modified on both sides since the last sync)
+- JSON formatted database for tracking files and CSV formatted logs
+- Filter files with regular expressions
+- Files are always safe by default, being moved to an identically structured archive directory before being deleted or overwritten
+## [Design Goals](#design-goals)
+- Backups should be future proof and verifiable, even without BackuPy
+ - uses [file-based increments](https://wiki.archlinux.org/index.php/Synchronization_and_backup_programs#File-based_increments) and human readable database/log files that are also easy to parse
+- Code should be simple and easy to verify to ensure predicable and reliable operation
+ - a callgraph is available in `analysis/callgraph.svg`
+ - there are only three, easy to follow functions (under `FileManager` in `backupy/fileman.py`) that ever touch your files, no more, no less, three shall be the number of thou functions, and the number of the functions shall be three
+ - use trustworthy dependencies
+- Follow the principle of least astonishment
+ - clear backup behaviour between directories, the current status of files and how they will be handled upon execution should be perfectly obvious
+- Avoid feature creep and duplicating other programs
+ - no delta-transfer (extend with another backend)
+ - no network storage or FUSE support (these must be mounted by another program for BackuPy to see them)
+ - no backup encryption (use encrypted storage)
+ - no filesystem monitoring (this is not a continuous backup/sync program)
+- Easily extensible with other backends
+ - all the low level functions used for file operations are under `FileOps` from `backupy.utils` for easy monkey patching (see `example_extension.py`)
+## [Usage Description](#usage-description)
+- Source and destination directories can be any directory accessible via the computer's file system
+ - Destination can be empty or contain files from a previous backup (even one made without BackuPy), matching files on both sides will be skipped
+ - Use the `--posix` flag if you plan on using BackuPy between Windows and any other OS
+- `Main modes` (how to handle new and deleted files)
+ - `Backup mode:` copies files that are only in source to destination
+ - `Mirror mode:` copies files that are only in source to destination and deletes files that are only in destination
+ - `Sync mode:` copies files that are only in source to destination and copies files that are only in destination to source
+ - you may also want to use `--sync-delete` to propagate deletions
+ - see `write_database_x2` in the [configuration file](#configuration-file) if syncing more than two folders
+- `Selection modes` (which file to select in cases where different versions exist on both sides)
+ - `Source mode:` copy source files to destination
+ - `Destination mode:` copy destination files to source
+ - `Newer mode:` copy newer files based on last modified time
+ - `None mode:` don't copy either, differing files will only be logged for manual intervention
+- `Compare modes` (how to detect which files have changed)
+ - `Attribute mode:` compare file attributes (size and last modified time)
+ - `Attribute+ mode:` compare file attributes and calculate CRCs only for new and changed files for future verification
+ - `CRC mode:` compare file attributes and CRC for every file, and checks previously stored CRCs to detect corruption
+ - you may also want to use `--verify` to verify the CRC of files after they're copied
+- Test your options first with the `--dry-run` flag
+- See [Command Line Interface](#command-line-interface) and [Configuration File](#configuration-file) below for all available options
+- By default, you will always be notified of any changes, unexpected modifications, sync conflicts, or file corruption before being prompted to continue, cancel, or skip selected files
+ - it is recommended to use `--qconflicts` if using `--noprompt`, especially if also using `--noarchive`
+- By default, you will be prompted before any changes are made to your files and
+ - overwritten files will be moved to `<source|dest>/.backupy/Archives/yymmdd-HHMM/<original path>`
+ - deleted files will be moved to `<source|dest>/.backupy/Trash/yymmdd-HHMM/<original path>`
+- Symbolic links to folders are never followed and always copied verbatim
+- Symbolic links to files are followed by default, copying the referenced file, use `--nofollow` to copy symbolic links to files verbatim
+- To restore files, just copy them over from your destination to source (or swap source and destination in BackuPy)
+## [Command Line Interface](#command-line-interface)
+```
+usage: backupy [options] -- <source> <dest>
+ backupy <source> <dest> [options]
+ backupy <source> --load [-c mode] [--dbscan] [--dry-run]
+ backupy -h | --help | --version
+
+positional arguments:
+ source Path to source
+ dest Path to destination
+
+optional arguments:
+ -h, --help show this help message and exit
+ --version show program's version number and exit
+
+file mode options:
+
+ -m mode Main mode: for files that exist only on one side
+ MIRROR (default)
+ [source-only -> destination, delete destination-only]
+ BACKUP
+ [source-only -> destination, keep destination-only]
+ SYNC
+ [source-only -> destination, destination-only -> source]
+ -s mode Selection mode: for files that exist on both sides but differ
+ SOURCE (default)
+ [copy source to destination]
+ DEST
+ [copy destination to source]
+ NEW
+ [copy newer to opposite side]
+ NO
+ [do nothing]
+ -c mode Compare mode: for detecting which files differ
+ ATTR (default)
+ [compare file attributes: mod-time and size]
+ ATTR+
+ [compare file attributes and record CRC for changed files]
+ CRC
+ [compare file attributes and CRC for every file]
+
+misc file options:
+
+ --sync-delete
+ Use the database to propagate deletions since the last sync
+ --fi regex [regex ...]
+ Filter: Only include files matching the regular expression(s)
+ (include all by default, searches file paths)
+ --fe regex [regex ...]
+ Filter: Exclude files matching the regular expression(s)
+ (exclude has priority over include, searches file paths)
+ --noarchive Disable archiving files before overwriting/deleting to:
+ <source|dest>/.backupy/Archives/yymmdd-HHMM/
+ <source|dest>/.backupy/Trash/yymmdd-HHMM/
+ --nofollow Do not follow symlinks when copying files
+ --nomoves Do not detect when files are moved or renamed
+
+execution options:
+
+ --noprompt Complete run without prompting for confirmation
+ -d, --dbscan
+ Only scan files to check and update their database entries
+ -n, --dry-run
+ Perform a dry run with no changes made to your files
+ -q, --qconflicts
+ Quit if database conflicts are detected (always notified)
+ -> unexpected changes on destination (backup and mirror)
+ -> sync conflict (file modified on both sides since last sync)
+ -> file corruption (ATTR+ or CRC compare modes)
+ -v, --verify
+ Verify CRC of copied files
+
+backend options (experimental):
+
+ --cold Do not scan files on destination and only use local databases
+ --rsync Use rsync for copying files
+
+configuration options:
+
+ --nolog Disable writing log and file databases to:
+ <source>/.backupy/Logs/log-yymmdd-HHMM.csv
+ <source|dest>/.backupy/database.json
+ -p, --posix Force posix style paths on non-posix operating systems
+ -k, --save Save configuration to <source>/.backupy/config.json and exit
+ -l, --load Load configuration from <source>/.backupy/config.json and run
+
+BackuPy is a simple backup program in python with an emphasis on data
+integrity and transparent behaviour - https://github.com/elesiuta/backupy
+
+BackuPy comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
+welcome to redistribute it under certain conditions. See the GNU General
+Public Licence for details.
+```
+## [Configuration File](#configuration-file)
+- The config file is saved to, and loaded from `<source>/.backupy/config.json`
+ - it contains all the options from the command line interface along with some additional options
+ - the only CLI options that can be used with `--load` and can override settings in `config.json` are `-c mode`, `--dbscan`, and `--dry-run`
+ - the overrides can enable `--dbscan` or `--dry-run` but not disable
+ - see `backupy/config.py` for where all the options and defaults are stored in code
+ - below is a description of all the other options that are available
+- `source_unique_id` & `dest_unique_id`
+ - unique id for each folder, used when `write_database_x2` is enabled, each assigned a random string by default
+- `archive_dir` = ".backupy/Archive"
+ - can be any subdirectory
+- `config_dir` = ".backupy"
+ - can't be changed under normal operation
+- `log_dir` = ".backupy/Logs"
+ - can be any subdirectory
+- `trash_dir` = ".backupy/Trash"
+ - can be any subdirectory
+- `cleanup_empty_dirs` = True
+ - delete directories when they become empty
+- `root_alias_log` = True
+ - abbreviate absolute paths to source and dest with `<source>` and `<dest>` in logs
+- `stdout_status_bar` = True
+ - show progress status bar
+- `verbose` = True
+ - print list of differences between directories to stdout
+- `write_database_x2` = False
+ - write both source and destination databases to each side using their `unique_id`, useful for syncing groups of more than two folders or with the `--sync-delete` flag
+- `write_log_dest` = False
+ - write a copy of the log to `<dest>/<log_dir>/log-yymmdd-HHMM-dest.csv`
+- `write_log_summary` = False
+ - alternative log structure, written in addition to standard log
+- `nocolour` = False
+ - disable colour when printing to stdout
+## [Building From Source](#building-from-source)
+- Run tests with
+```
+python setup.py test
+```
+- Building a python package
+```
+python setup.py sdist
+```
+- Building an executable with the GUI (depends on [Gooey](https://pypi.org/project/Gooey/)) (deprecated, may rewrite with flutter)
+```
+pyinstaller build.spec
+```
+- You can package the executable on Windows by running setup.iss with Inno Setup
+
+
+
+
+%package help
+Summary: Development documents and examples for BackuPy
+Provides: python3-BackuPy-doc
+%description help
+# [BackuPy](#backupy)
+ - [Installation](#installation)
+ - [Features](#features)
+ - [Design Goals](#design-goals)
+ - [Usage Description](#usage-description)
+ - [Command Line Interface](#command-line-interface)
+ - [Configuration File](#configuration-file)
+ - [Building From Source](#building-from-source)
+## [Installation](#installation)
+- Install the latest release from PyPI (supports all platforms with Python and has no dependencies outside the standard library)
+```
+pip install backupy --upgrade
+```
+## [Features](#features)
+- Backup, Mirror, and Sync Modes
+- Compare files using attributes or CRCs
+- View changed file tree with curses
+- Detection and alerts of corrupted files
+- Detection and alerts of unexpected file modifications on destination outside of backups and mirrors, or sync conflicts (a file was modified on both sides since the last sync)
+- JSON formatted database for tracking files and CSV formatted logs
+- Filter files with regular expressions
+- Files are always safe by default, being moved to an identically structured archive directory before being deleted or overwritten
+## [Design Goals](#design-goals)
+- Backups should be future proof and verifiable, even without BackuPy
+ - uses [file-based increments](https://wiki.archlinux.org/index.php/Synchronization_and_backup_programs#File-based_increments) and human readable database/log files that are also easy to parse
+- Code should be simple and easy to verify to ensure predicable and reliable operation
+ - a callgraph is available in `analysis/callgraph.svg`
+ - there are only three, easy to follow functions (under `FileManager` in `backupy/fileman.py`) that ever touch your files, no more, no less, three shall be the number of thou functions, and the number of the functions shall be three
+ - use trustworthy dependencies
+- Follow the principle of least astonishment
+ - clear backup behaviour between directories, the current status of files and how they will be handled upon execution should be perfectly obvious
+- Avoid feature creep and duplicating other programs
+ - no delta-transfer (extend with another backend)
+ - no network storage or FUSE support (these must be mounted by another program for BackuPy to see them)
+ - no backup encryption (use encrypted storage)
+ - no filesystem monitoring (this is not a continuous backup/sync program)
+- Easily extensible with other backends
+ - all the low level functions used for file operations are under `FileOps` from `backupy.utils` for easy monkey patching (see `example_extension.py`)
+## [Usage Description](#usage-description)
+- Source and destination directories can be any directory accessible via the computer's file system
+ - Destination can be empty or contain files from a previous backup (even one made without BackuPy), matching files on both sides will be skipped
+ - Use the `--posix` flag if you plan on using BackuPy between Windows and any other OS
+- `Main modes` (how to handle new and deleted files)
+ - `Backup mode:` copies files that are only in source to destination
+ - `Mirror mode:` copies files that are only in source to destination and deletes files that are only in destination
+ - `Sync mode:` copies files that are only in source to destination and copies files that are only in destination to source
+ - you may also want to use `--sync-delete` to propagate deletions
+ - see `write_database_x2` in the [configuration file](#configuration-file) if syncing more than two folders
+- `Selection modes` (which file to select in cases where different versions exist on both sides)
+ - `Source mode:` copy source files to destination
+ - `Destination mode:` copy destination files to source
+ - `Newer mode:` copy newer files based on last modified time
+ - `None mode:` don't copy either, differing files will only be logged for manual intervention
+- `Compare modes` (how to detect which files have changed)
+ - `Attribute mode:` compare file attributes (size and last modified time)
+ - `Attribute+ mode:` compare file attributes and calculate CRCs only for new and changed files for future verification
+ - `CRC mode:` compare file attributes and CRC for every file, and checks previously stored CRCs to detect corruption
+ - you may also want to use `--verify` to verify the CRC of files after they're copied
+- Test your options first with the `--dry-run` flag
+- See [Command Line Interface](#command-line-interface) and [Configuration File](#configuration-file) below for all available options
+- By default, you will always be notified of any changes, unexpected modifications, sync conflicts, or file corruption before being prompted to continue, cancel, or skip selected files
+ - it is recommended to use `--qconflicts` if using `--noprompt`, especially if also using `--noarchive`
+- By default, you will be prompted before any changes are made to your files and
+ - overwritten files will be moved to `<source|dest>/.backupy/Archives/yymmdd-HHMM/<original path>`
+ - deleted files will be moved to `<source|dest>/.backupy/Trash/yymmdd-HHMM/<original path>`
+- Symbolic links to folders are never followed and always copied verbatim
+- Symbolic links to files are followed by default, copying the referenced file, use `--nofollow` to copy symbolic links to files verbatim
+- To restore files, just copy them over from your destination to source (or swap source and destination in BackuPy)
+## [Command Line Interface](#command-line-interface)
+```
+usage: backupy [options] -- <source> <dest>
+ backupy <source> <dest> [options]
+ backupy <source> --load [-c mode] [--dbscan] [--dry-run]
+ backupy -h | --help | --version
+
+positional arguments:
+ source Path to source
+ dest Path to destination
+
+optional arguments:
+ -h, --help show this help message and exit
+ --version show program's version number and exit
+
+file mode options:
+
+ -m mode Main mode: for files that exist only on one side
+ MIRROR (default)
+ [source-only -> destination, delete destination-only]
+ BACKUP
+ [source-only -> destination, keep destination-only]
+ SYNC
+ [source-only -> destination, destination-only -> source]
+ -s mode Selection mode: for files that exist on both sides but differ
+ SOURCE (default)
+ [copy source to destination]
+ DEST
+ [copy destination to source]
+ NEW
+ [copy newer to opposite side]
+ NO
+ [do nothing]
+ -c mode Compare mode: for detecting which files differ
+ ATTR (default)
+ [compare file attributes: mod-time and size]
+ ATTR+
+ [compare file attributes and record CRC for changed files]
+ CRC
+ [compare file attributes and CRC for every file]
+
+misc file options:
+
+ --sync-delete
+ Use the database to propagate deletions since the last sync
+ --fi regex [regex ...]
+ Filter: Only include files matching the regular expression(s)
+ (include all by default, searches file paths)
+ --fe regex [regex ...]
+ Filter: Exclude files matching the regular expression(s)
+ (exclude has priority over include, searches file paths)
+ --noarchive Disable archiving files before overwriting/deleting to:
+ <source|dest>/.backupy/Archives/yymmdd-HHMM/
+ <source|dest>/.backupy/Trash/yymmdd-HHMM/
+ --nofollow Do not follow symlinks when copying files
+ --nomoves Do not detect when files are moved or renamed
+
+execution options:
+
+ --noprompt Complete run without prompting for confirmation
+ -d, --dbscan
+ Only scan files to check and update their database entries
+ -n, --dry-run
+ Perform a dry run with no changes made to your files
+ -q, --qconflicts
+ Quit if database conflicts are detected (always notified)
+ -> unexpected changes on destination (backup and mirror)
+ -> sync conflict (file modified on both sides since last sync)
+ -> file corruption (ATTR+ or CRC compare modes)
+ -v, --verify
+ Verify CRC of copied files
+
+backend options (experimental):
+
+ --cold Do not scan files on destination and only use local databases
+ --rsync Use rsync for copying files
+
+configuration options:
+
+ --nolog Disable writing log and file databases to:
+ <source>/.backupy/Logs/log-yymmdd-HHMM.csv
+ <source|dest>/.backupy/database.json
+ -p, --posix Force posix style paths on non-posix operating systems
+ -k, --save Save configuration to <source>/.backupy/config.json and exit
+ -l, --load Load configuration from <source>/.backupy/config.json and run
+
+BackuPy is a simple backup program in python with an emphasis on data
+integrity and transparent behaviour - https://github.com/elesiuta/backupy
+
+BackuPy comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
+welcome to redistribute it under certain conditions. See the GNU General
+Public Licence for details.
+```
+## [Configuration File](#configuration-file)
+- The config file is saved to, and loaded from `<source>/.backupy/config.json`
+ - it contains all the options from the command line interface along with some additional options
+ - the only CLI options that can be used with `--load` and can override settings in `config.json` are `-c mode`, `--dbscan`, and `--dry-run`
+ - the overrides can enable `--dbscan` or `--dry-run` but not disable
+ - see `backupy/config.py` for where all the options and defaults are stored in code
+ - below is a description of all the other options that are available
+- `source_unique_id` & `dest_unique_id`
+ - unique id for each folder, used when `write_database_x2` is enabled, each assigned a random string by default
+- `archive_dir` = ".backupy/Archive"
+ - can be any subdirectory
+- `config_dir` = ".backupy"
+ - can't be changed under normal operation
+- `log_dir` = ".backupy/Logs"
+ - can be any subdirectory
+- `trash_dir` = ".backupy/Trash"
+ - can be any subdirectory
+- `cleanup_empty_dirs` = True
+ - delete directories when they become empty
+- `root_alias_log` = True
+ - abbreviate absolute paths to source and dest with `<source>` and `<dest>` in logs
+- `stdout_status_bar` = True
+ - show progress status bar
+- `verbose` = True
+ - print list of differences between directories to stdout
+- `write_database_x2` = False
+ - write both source and destination databases to each side using their `unique_id`, useful for syncing groups of more than two folders or with the `--sync-delete` flag
+- `write_log_dest` = False
+ - write a copy of the log to `<dest>/<log_dir>/log-yymmdd-HHMM-dest.csv`
+- `write_log_summary` = False
+ - alternative log structure, written in addition to standard log
+- `nocolour` = False
+ - disable colour when printing to stdout
+## [Building From Source](#building-from-source)
+- Run tests with
+```
+python setup.py test
+```
+- Building a python package
+```
+python setup.py sdist
+```
+- Building an executable with the GUI (depends on [Gooey](https://pypi.org/project/Gooey/)) (deprecated, may rewrite with flutter)
+```
+pyinstaller build.spec
+```
+- You can package the executable on Windows by running setup.iss with Inno Setup
+
+
+
+
+%prep
+%autosetup -n BackuPy-1.10.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-BackuPy -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.10.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..bca71fe
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+fd66778b5fe811546a11cb7ce2e446e8 BackuPy-1.10.1.tar.gz