Skip to content

Commit 4a9d01f

Browse files
committed
fix: include git repositories in borg repo
1 parent 924aa14 commit 4a9d01f

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

django/curator/invoke_tasks/borg.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
DEFAULT_LIBRARY_BASENAME = os.path.basename(settings.LIBRARY_ROOT)
1313
DEFAULT_MEDIA_BASENAME = os.path.basename(settings.MEDIA_ROOT)
14+
DEFAULT_REPOSITORY_BASENAME = os.path.basename(settings.REPOSITORY_ROOT)
1415

1516

1617
@task(aliases=["init"])
@@ -48,12 +49,14 @@ def backup(ctx):
4849
archive = "{utcnow}"
4950
library = os.path.relpath(settings.LIBRARY_ROOT, share)
5051
media = os.path.relpath(settings.MEDIA_ROOT, share)
52+
repository = os.path.relpath(settings.REPOSITORY_ROOT, share)
5153
database = os.path.relpath(os.path.join(settings.BACKUP_ROOT, "latest"), share)
5254

5355
error_msgs = []
5456
for p in (
5557
settings.LIBRARY_ROOT,
5658
settings.MEDIA_ROOT,
59+
settings.REPOSITORY_ROOT,
5760
os.path.join(settings.BACKUP_ROOT, "latest"),
5861
):
5962
if not os.path.exists(p):
@@ -63,44 +66,57 @@ def backup(ctx):
6366

6467
with ctx.cd(share):
6568
ctx.run(
66-
f'borg create --stats --compression lz4 {repo}::"{archive}" {library} {media} {database}',
69+
f'borg create --stats --compression lz4 {repo}::"{archive}" {library} {media} {repository} {database}',
6770
echo=True,
6871
env=environment(),
6972
)
7073

7174

7275
def delete_latest_uncompressed_backup(
73-
src_library=DEFAULT_LIBRARY_BASENAME, src_media=DEFAULT_MEDIA_BASENAME
76+
src_library=DEFAULT_LIBRARY_BASENAME,
77+
src_media=DEFAULT_MEDIA_BASENAME,
78+
src_repository=DEFAULT_REPOSITORY_BASENAME,
7479
):
7580
latest_dest_library = os.path.join(settings.PREVIOUS_SHARE_ROOT, src_library)
7681
latest_dest_media = os.path.join(settings.PREVIOUS_SHARE_ROOT, src_media)
82+
latest_dest_repository = os.path.join(settings.PREVIOUS_SHARE_ROOT, src_repository)
7783

7884
shutil.rmtree(latest_dest_library, ignore_errors=True)
7985
shutil.rmtree(latest_dest_media, ignore_errors=True)
86+
shutil.rmtree(latest_dest_repository, ignore_errors=True)
8087

8188

8289
def rotate_library_and_media_files(
8390
working_directory,
8491
src_library=DEFAULT_LIBRARY_BASENAME,
8592
src_media=DEFAULT_MEDIA_BASENAME,
93+
src_repository=DEFAULT_REPOSITORY_BASENAME,
8694
):
8795
"""
88-
Rotate the current library and media files
96+
Rotate the current library, media, and repository files
8997
90-
Current library and media files are moved to the '.latest' folder in case of problems during the restore process.
98+
Current library, media, and repository files are moved to the '.latest' folder in case of problems during the restore process.
9199
Files in .latest can be deleted if the restore was successful
92100
"""
93-
print("rotating library and media files")
94-
delete_latest_uncompressed_backup(src_library=src_library, src_media=src_media)
101+
print("rotating library, media, and repository files")
102+
delete_latest_uncompressed_backup(
103+
src_library=src_library, src_media=src_media, src_repository=src_repository
104+
)
95105

96106
os.makedirs(settings.PREVIOUS_SHARE_ROOT, exist_ok=True)
97107
if os.path.exists(settings.LIBRARY_ROOT):
98108
shutil.move(settings.LIBRARY_ROOT, settings.PREVIOUS_SHARE_ROOT)
99109
if os.path.exists(settings.MEDIA_ROOT):
100110
shutil.move(settings.MEDIA_ROOT, settings.PREVIOUS_SHARE_ROOT)
111+
if os.path.exists(settings.REPOSITORY_ROOT):
112+
shutil.move(settings.REPOSITORY_ROOT, settings.PREVIOUS_SHARE_ROOT)
101113

102114
shutil.move(os.path.join(working_directory, src_library), settings.SHARE_DIR)
103115
shutil.move(os.path.join(working_directory, src_media), settings.SHARE_DIR)
116+
# repository dir may not exist in older backups
117+
src_repository_path = os.path.join(working_directory, src_repository)
118+
if os.path.exists(src_repository_path):
119+
shutil.move(src_repository_path, settings.SHARE_DIR)
104120

105121

106122
def environment():

0 commit comments

Comments
 (0)