PyHardLinkBackup 1.7.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyhardlinkbackup-1.7.3/.editorconfig +20 -0
- pyhardlinkbackup-1.7.3/.github/workflows/tests.yml +73 -0
- pyhardlinkbackup-1.7.3/.gitignore +15 -0
- pyhardlinkbackup-1.7.3/.idea/.gitignore +3 -0
- pyhardlinkbackup-1.7.3/.pre-commit-config.yaml +7 -0
- pyhardlinkbackup-1.7.3/.pre-commit-hooks.yaml +13 -0
- pyhardlinkbackup-1.7.3/.run/Template Python tests.run.xml +24 -0
- pyhardlinkbackup-1.7.3/.run/Unittests - __all__.run.xml +22 -0
- pyhardlinkbackup-1.7.3/.run/cli.py --help.run.xml +25 -0
- pyhardlinkbackup-1.7.3/.run/dev-cli update.run.xml +26 -0
- pyhardlinkbackup-1.7.3/.run/only DocTests.run.xml +23 -0
- pyhardlinkbackup-1.7.3/.run/only DocWrite.run.xml +24 -0
- pyhardlinkbackup-1.7.3/.venv-app/lib/python3.12/site-packages/cli_base/tests/shell_complete_snapshots/.gitignore +1 -0
- pyhardlinkbackup-1.7.3/PKG-INFO +672 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/__init__.py +7 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/__main__.py +10 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/backup.py +276 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_app/__init__.py +41 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_app/phlb.py +123 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/__init__.py +70 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/benchmark.py +138 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/code_style.py +12 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/packaging.py +65 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/shell_completion.py +23 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/testing.py +52 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/cli_dev/update_readme_history.py +33 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/compare_backup.py +245 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/constants.py +18 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/logging_setup.py +124 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/rebuild_databases.py +182 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/__init__.py +36 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_backup.py +1113 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_compare_backup.py +165 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_doc_write.py +26 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_doctests.py +10 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_project_setup.py +46 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_readme.py +75 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_readme_history.py +9 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/tests/test_rebuild_database.py +222 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/__init__.py +0 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/file_hash_database.py +62 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/file_size_database.py +46 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/filesystem.py +197 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/humanize.py +39 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/rich_utils.py +254 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/sha256sums.py +61 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tee.py +40 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/__init__.py +0 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/test_file_hash_database.py +143 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/test_file_size_database.py +138 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/test_filesystem.py +128 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tests/unittest_utilities.py +78 -0
- pyhardlinkbackup-1.7.3/PyHardLinkBackup/utilities/tyro_cli_shared_args.py +12 -0
- pyhardlinkbackup-1.7.3/README.md +657 -0
- pyhardlinkbackup-1.7.3/cli.py +123 -0
- pyhardlinkbackup-1.7.3/dev-cli.py +122 -0
- pyhardlinkbackup-1.7.3/dist/.gitignore +1 -0
- pyhardlinkbackup-1.7.3/docs/README.md +81 -0
- pyhardlinkbackup-1.7.3/docs/about-docs.md +8 -0
- pyhardlinkbackup-1.7.3/noxfile.py +27 -0
- pyhardlinkbackup-1.7.3/pyproject.toml +149 -0
- pyhardlinkbackup-1.7.3/uv.lock +1542 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# see https://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
indent_style = space
|
|
6
|
+
indent_size = 4
|
|
7
|
+
end_of_line = lf
|
|
8
|
+
charset = utf-8
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
insert_final_newline = true
|
|
11
|
+
|
|
12
|
+
[*.py]
|
|
13
|
+
max_line_length = 119
|
|
14
|
+
|
|
15
|
+
[{Makefile,**.mk}]
|
|
16
|
+
indent_style = tab
|
|
17
|
+
insert_final_newline = false
|
|
18
|
+
|
|
19
|
+
[{*.yaml,*.yml}]
|
|
20
|
+
indent_size = 2
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
|
|
2
|
+
name: tests
|
|
3
|
+
permissions:
|
|
4
|
+
contents: read
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
pull_request:
|
|
11
|
+
schedule:
|
|
12
|
+
- cron: '0 8 * * *'
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
test:
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
python-version: ["3.14", "3.13", "3.12"]
|
|
20
|
+
os: [ubuntu-latest, macos-latest] # TODO: windows-latest
|
|
21
|
+
runs-on: ${{ matrix.os }}
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout
|
|
24
|
+
run: |
|
|
25
|
+
echo $GITHUB_REF $GITHUB_SHA
|
|
26
|
+
git clone https://github.com/$GITHUB_REPOSITORY.git .
|
|
27
|
+
git fetch origin $GITHUB_SHA:temporary-ci-branch
|
|
28
|
+
git checkout $GITHUB_SHA || (git fetch && git checkout $GITHUB_SHA)
|
|
29
|
+
|
|
30
|
+
- name: 'Set up Python ${{ matrix.python-version }}'
|
|
31
|
+
uses: actions/setup-python@v5
|
|
32
|
+
# https://github.com/marketplace/actions/setup-python
|
|
33
|
+
with:
|
|
34
|
+
python-version: '${{ matrix.python-version }}'
|
|
35
|
+
cache: 'pip' # caching pip dependencies
|
|
36
|
+
cache-dependency-path: '**/requirements.*.txt'
|
|
37
|
+
|
|
38
|
+
- name: 'Bootstrap app venv'
|
|
39
|
+
# The first CLI call will create the .venv
|
|
40
|
+
run: |
|
|
41
|
+
./cli.py version
|
|
42
|
+
|
|
43
|
+
- name: 'app CLI help'
|
|
44
|
+
run: |
|
|
45
|
+
./cli.py --help
|
|
46
|
+
|
|
47
|
+
- name: 'Bootstrap dev venv'
|
|
48
|
+
# The first CLI call will create the .venv
|
|
49
|
+
run: |
|
|
50
|
+
./dev-cli.py version
|
|
51
|
+
|
|
52
|
+
- name: 'dev CLI help'
|
|
53
|
+
run: |
|
|
54
|
+
./dev-cli.py --help
|
|
55
|
+
|
|
56
|
+
- name: 'Run pip-audit'
|
|
57
|
+
run: |
|
|
58
|
+
./dev-cli.py pip-audit
|
|
59
|
+
|
|
60
|
+
- name: 'Run tests with Python v${{ matrix.python-version }}'
|
|
61
|
+
env:
|
|
62
|
+
PYTHONUNBUFFERED: 1
|
|
63
|
+
PYTHONWARNINGS: always
|
|
64
|
+
run: |
|
|
65
|
+
./dev-cli.py coverage
|
|
66
|
+
|
|
67
|
+
- name: 'Upload coverage report'
|
|
68
|
+
uses: codecov/codecov-action@v4
|
|
69
|
+
# https://github.com/marketplace/actions/codecov
|
|
70
|
+
with:
|
|
71
|
+
fail_ci_if_error: false
|
|
72
|
+
verbose: true
|
|
73
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# https://pre-commit.com/#creating-new-hooks
|
|
2
|
+
- id: update-readme-history
|
|
3
|
+
name: cli-base-utilities
|
|
4
|
+
description: >-
|
|
5
|
+
Update history in README.md from git log.
|
|
6
|
+
entry: "python -m cli_base update-readme-history -v"
|
|
7
|
+
language: python
|
|
8
|
+
language_version: python3
|
|
9
|
+
require_serial: true
|
|
10
|
+
pass_filenames: false
|
|
11
|
+
always_run: true
|
|
12
|
+
verbose: true
|
|
13
|
+
stages: [pre-commit, post-rewrite, pre-push]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<component name="ProjectRunConfigurationManager">
|
|
2
|
+
<configuration default="true" type="tests" factoryName="Unittests">
|
|
3
|
+
<module name="PyHardLinkBackup" />
|
|
4
|
+
<option name="ENV_FILES" value="" />
|
|
5
|
+
<option name="INTERPRETER_OPTIONS" value="" />
|
|
6
|
+
<option name="PARENT_ENVS" value="true" />
|
|
7
|
+
<envs>
|
|
8
|
+
<env name="PYTHONUNBUFFERED" value="1" />
|
|
9
|
+
<env name="PYTHONWARNINGS" value="always" />
|
|
10
|
+
</envs>
|
|
11
|
+
<option name="SDK_HOME" value="$PROJECT_DIR$/.venv/bin/python" />
|
|
12
|
+
<option name="SDK_NAME" value="Python 3 (manageprojects)" />
|
|
13
|
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
14
|
+
<option name="IS_MODULE_SDK" value="false" />
|
|
15
|
+
<option name="ADD_CONTENT_ROOTS" value="false" />
|
|
16
|
+
<option name="ADD_SOURCE_ROOTS" value="false" />
|
|
17
|
+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
18
|
+
<option name="_new_pattern" value="""" />
|
|
19
|
+
<option name="_new_additionalArguments" value=""--locals --verbose"" />
|
|
20
|
+
<option name="_new_target" value="""" />
|
|
21
|
+
<option name="_new_targetType" value=""PATH"" />
|
|
22
|
+
<method v="2" />
|
|
23
|
+
</configuration>
|
|
24
|
+
</component>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<component name="ProjectRunConfigurationManager">
|
|
2
|
+
<configuration default="false" name="Unittests - **all**" type="tests" factoryName="Autodetect">
|
|
3
|
+
<module name="PyHardLinkBackup" />
|
|
4
|
+
<option name="ENV_FILES" value="" />
|
|
5
|
+
<option name="INTERPRETER_OPTIONS" value="" />
|
|
6
|
+
<option name="PARENT_ENVS" value="true" />
|
|
7
|
+
<envs>
|
|
8
|
+
<env name="PYTHONUNBUFFERED" value="1" />
|
|
9
|
+
<env name="PYTHONWARNINGS" value="always" />
|
|
10
|
+
</envs>
|
|
11
|
+
<option name="SDK_HOME" value="" />
|
|
12
|
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
13
|
+
<option name="IS_MODULE_SDK" value="true" />
|
|
14
|
+
<option name="ADD_CONTENT_ROOTS" value="false" />
|
|
15
|
+
<option name="ADD_SOURCE_ROOTS" value="false" />
|
|
16
|
+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
17
|
+
<option name="_new_additionalArguments" value=""--locals --verbose"" />
|
|
18
|
+
<option name="_new_target" value=""test_manageprojects.ManageProjectsTestCase.test_start_project"" />
|
|
19
|
+
<option name="_new_targetType" value=""CUSTOM"" />
|
|
20
|
+
<method v="2" />
|
|
21
|
+
</configuration>
|
|
22
|
+
</component>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<component name="ProjectRunConfigurationManager">
|
|
2
|
+
<configuration default="false" name="cli.py --help" type="PythonConfigurationType" factoryName="Python">
|
|
3
|
+
<module name="PyHardLinkBackup" />
|
|
4
|
+
<option name="ENV_FILES" value="" />
|
|
5
|
+
<option name="INTERPRETER_OPTIONS" value="" />
|
|
6
|
+
<option name="PARENT_ENVS" value="true" />
|
|
7
|
+
<envs>
|
|
8
|
+
<env name="PYTHONUNBUFFERED" value="1" />
|
|
9
|
+
</envs>
|
|
10
|
+
<option name="SDK_HOME" value="" />
|
|
11
|
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
12
|
+
<option name="IS_MODULE_SDK" value="true" />
|
|
13
|
+
<option name="ADD_CONTENT_ROOTS" value="false" />
|
|
14
|
+
<option name="ADD_SOURCE_ROOTS" value="false" />
|
|
15
|
+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
16
|
+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/cli.py" />
|
|
17
|
+
<option name="PARAMETERS" value="--help" />
|
|
18
|
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
|
19
|
+
<option name="EMULATE_TERMINAL" value="false" />
|
|
20
|
+
<option name="MODULE_MODE" value="false" />
|
|
21
|
+
<option name="REDIRECT_INPUT" value="false" />
|
|
22
|
+
<option name="INPUT_FILE" value="" />
|
|
23
|
+
<method v="2" />
|
|
24
|
+
</configuration>
|
|
25
|
+
</component>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<component name="ProjectRunConfigurationManager">
|
|
2
|
+
<configuration default="false" name="dev-cli update" type="PythonConfigurationType" factoryName="Python">
|
|
3
|
+
<module name="PyHardLinkBackup" />
|
|
4
|
+
<option name="ENV_FILES" value="" />
|
|
5
|
+
<option name="INTERPRETER_OPTIONS" value="" />
|
|
6
|
+
<option name="PARENT_ENVS" value="true" />
|
|
7
|
+
<envs>
|
|
8
|
+
<env name="PYTHONUNBUFFERED" value="1" />
|
|
9
|
+
</envs>
|
|
10
|
+
<option name="SDK_HOME" value="" />
|
|
11
|
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
12
|
+
<option name="IS_MODULE_SDK" value="true" />
|
|
13
|
+
<option name="ADD_CONTENT_ROOTS" value="false" />
|
|
14
|
+
<option name="ADD_SOURCE_ROOTS" value="false" />
|
|
15
|
+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
16
|
+
<option name="RUN_TOOL" value="" />
|
|
17
|
+
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/dev-cli.py" />
|
|
18
|
+
<option name="PARAMETERS" value="update" />
|
|
19
|
+
<option name="SHOW_COMMAND_LINE" value="false" />
|
|
20
|
+
<option name="EMULATE_TERMINAL" value="false" />
|
|
21
|
+
<option name="MODULE_MODE" value="false" />
|
|
22
|
+
<option name="REDIRECT_INPUT" value="false" />
|
|
23
|
+
<option name="INPUT_FILE" value="" />
|
|
24
|
+
<method v="2" />
|
|
25
|
+
</configuration>
|
|
26
|
+
</component>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<component name="ProjectRunConfigurationManager">
|
|
2
|
+
<configuration default="false" name="only DocTests" type="tests" factoryName="Unittests">
|
|
3
|
+
<module name="PyHardLinkBackup" />
|
|
4
|
+
<option name="ENV_FILES" value="" />
|
|
5
|
+
<option name="INTERPRETER_OPTIONS" value="" />
|
|
6
|
+
<option name="PARENT_ENVS" value="true" />
|
|
7
|
+
<envs>
|
|
8
|
+
<env name="PYTHONUNBUFFERED" value="1" />
|
|
9
|
+
<env name="PYTHONWARNINGS" value="always" />
|
|
10
|
+
</envs>
|
|
11
|
+
<option name="SDK_HOME" value="" />
|
|
12
|
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
13
|
+
<option name="IS_MODULE_SDK" value="true" />
|
|
14
|
+
<option name="ADD_CONTENT_ROOTS" value="false" />
|
|
15
|
+
<option name="ADD_SOURCE_ROOTS" value="false" />
|
|
16
|
+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
17
|
+
<option name="_new_pattern" value="""" />
|
|
18
|
+
<option name="_new_additionalArguments" value=""--locals --verbose"" />
|
|
19
|
+
<option name="_new_target" value=""manageprojects.tests.test_doctests.DocTests.test_doctests"" />
|
|
20
|
+
<option name="_new_targetType" value=""PYTHON"" />
|
|
21
|
+
<method v="2" />
|
|
22
|
+
</configuration>
|
|
23
|
+
</component>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<component name="ProjectRunConfigurationManager">
|
|
2
|
+
<configuration default="false" name="only DocWrite" type="tests" factoryName="Unittests">
|
|
3
|
+
<module name="PyHardLinkBackup" />
|
|
4
|
+
<option name="ENV_FILES" value="" />
|
|
5
|
+
<option name="INTERPRETER_OPTIONS" value="" />
|
|
6
|
+
<option name="PARENT_ENVS" value="true" />
|
|
7
|
+
<envs>
|
|
8
|
+
<env name="PYTHONUNBUFFERED" value="1" />
|
|
9
|
+
<env name="PYTHONWARNINGS" value="always" />
|
|
10
|
+
</envs>
|
|
11
|
+
<option name="SDK_HOME" value="" />
|
|
12
|
+
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
13
|
+
<option name="IS_MODULE_SDK" value="true" />
|
|
14
|
+
<option name="ADD_CONTENT_ROOTS" value="false" />
|
|
15
|
+
<option name="ADD_SOURCE_ROOTS" value="false" />
|
|
16
|
+
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
17
|
+
<option name="RUN_TOOL" value="" />
|
|
18
|
+
<option name="_new_pattern" value="""" />
|
|
19
|
+
<option name="_new_additionalArguments" value="""" />
|
|
20
|
+
<option name="_new_target" value=""PyHardLinkBackup.tests.test_doc_write"" />
|
|
21
|
+
<option name="_new_targetType" value=""PYTHON"" />
|
|
22
|
+
<method v="2" />
|
|
23
|
+
</configuration>
|
|
24
|
+
</component>
|