Show More
@@ -38,7 +38,7 b' from rhodecode.lib import diffs, helpers' | |||
|
38 | 38 | from rhodecode.lib import audit_logger |
|
39 | 39 | from rhodecode.lib.hash_utils import sha1_safe |
|
40 | 40 | from rhodecode.lib.rc_cache.archive_cache import get_archival_cache_store, get_archival_config, ReentrantLock |
|
41 | from rhodecode.lib.str_utils import safe_bytes | |
|
41 | from rhodecode.lib.str_utils import safe_bytes, convert_special_chars | |
|
42 | 42 | from rhodecode.lib.view_utils import parse_path_ref |
|
43 | 43 | from rhodecode.lib.exceptions import NonRelativePathError |
|
44 | 44 | from rhodecode.lib.codeblocks import ( |
@@ -63,17 +63,17 b' from rhodecode.model.db import Repositor' | |||
|
63 | 63 | log = logging.getLogger(__name__) |
|
64 | 64 | |
|
65 | 65 | |
|
66 | def get_archive_name(db_repo_name, commit_sha, ext, subrepos=False, path_sha='', with_hash=True): | |
|
66 | def get_archive_name(db_repo_id, db_repo_name, commit_sha, ext, subrepos=False, path_sha='', with_hash=True): | |
|
67 | 67 | # original backward compat name of archive |
|
68 | clean_name = safe_str(db_repo_name.replace('/', '_')) | |
|
68 | clean_name = safe_str(convert_special_chars(db_repo_name).replace('/', '_')) | |
|
69 | 69 | |
|
70 | # e.g vcsserver-sub-1-abcfdef-archive-all.zip | |
|
71 | # vcsserver-sub-0-abcfdef-COMMIT_SHA-PATH_SHA.zip | |
|
72 | ||
|
70 | # e.g vcsserver-id-abcd-sub-1-abcfdef-archive-all.zip | |
|
71 | # vcsserver-id-abcd-sub-0-abcfdef-COMMIT_SHA-PATH_SHA.zip | |
|
72 | id_sha = sha1_safe(str(db_repo_id))[:4] | |
|
73 | 73 | sub_repo = 'sub-1' if subrepos else 'sub-0' |
|
74 | 74 | commit = commit_sha if with_hash else 'archive' |
|
75 | 75 | path_marker = (path_sha if with_hash else '') or 'all' |
|
76 | archive_name = f'{clean_name}-{sub_repo}-{commit}-{path_marker}{ext}' | |
|
76 | archive_name = f'{clean_name}-id-{id_sha}-{sub_repo}-{commit}-{path_marker}{ext}' | |
|
77 | 77 | |
|
78 | 78 | return archive_name |
|
79 | 79 | |
@@ -396,7 +396,7 b' class RepoFilesView(RepoAppView):' | |||
|
396 | 396 | |
|
397 | 397 | # used for cache etc, consistent unique archive name |
|
398 | 398 | archive_name_key = get_archive_name( |
|
399 | self.db_repo_name, commit_sha=commit.short_id, ext=ext, subrepos=subrepos, | |
|
399 | self.db_repo.repo_id, self.db_repo_name, commit_sha=commit.short_id, ext=ext, subrepos=subrepos, | |
|
400 | 400 | path_sha=path_sha, with_hash=True) |
|
401 | 401 | |
|
402 | 402 | if not with_hash: |
@@ -404,7 +404,7 b' class RepoFilesView(RepoAppView):' | |||
|
404 | 404 | |
|
405 | 405 | # what end client gets served |
|
406 | 406 | response_archive_name = get_archive_name( |
|
407 | self.db_repo_name, commit_sha=commit.short_id, ext=ext, subrepos=subrepos, | |
|
407 | self.db_repo.repo_id, self.db_repo_name, commit_sha=commit.short_id, ext=ext, subrepos=subrepos, | |
|
408 | 408 | path_sha=path_sha, with_hash=with_hash) |
|
409 | 409 | |
|
410 | 410 | # remove extension from our archive directory name |
@@ -444,9 +444,10 b' class RepoFilesView(RepoAppView):' | |||
|
444 | 444 | if not reader: |
|
445 | 445 | raise ValueError('archive cache reader is empty, failed to fetch file from distributed archive cache') |
|
446 | 446 | |
|
447 | def archive_iterator(_reader): | |
|
447 | def archive_iterator(_reader, block_size: int = 4096*512): | |
|
448 | # 4096 * 64 = 64KB | |
|
448 | 449 | while 1: |
|
449 |
data = _reader.read( |
|
|
450 | data = _reader.read(block_size) | |
|
450 | 451 | if not data: |
|
451 | 452 | break |
|
452 | 453 | yield data |
@@ -1222,7 +1222,7 b' class BaseCommit(object):' | |||
|
1222 | 1222 | Creates an archive containing the contents of the repository. |
|
1223 | 1223 | |
|
1224 | 1224 | :param archive_name_key: unique key under this archive should be generated |
|
1225 | :param kind: one of following: ``"tbz2"``, ``"tgz"``, ``"zip"``. | |
|
1225 | :param kind: one of the following: ``"tbz2"``, ``"tgz"``, ``"zip"``. | |
|
1226 | 1226 | :param archive_dir_name: name of root directory in archive. |
|
1227 | 1227 | Default is repository name and commit's short_id joined with dash: |
|
1228 | 1228 | ``"{repo_name}-{short_id}"``. |
@@ -1238,8 +1238,7 b' class BaseCommit(object):' | |||
|
1238 | 1238 | allowed_kinds = [x[0] for x in settings.ARCHIVE_SPECS] |
|
1239 | 1239 | if kind not in allowed_kinds: |
|
1240 | 1240 | raise ImproperArchiveTypeError( |
|
1241 |
'Archive kind ( |
|
|
1242 | (kind, allowed_kinds)) | |
|
1241 | f'Archive kind ({kind}) not supported use one of {allowed_kinds}') | |
|
1243 | 1242 | |
|
1244 | 1243 | archive_dir_name = self._validate_archive_prefix(archive_dir_name) |
|
1245 | 1244 | mtime = mtime is not None or time.mktime(self.date.timetuple()) |
General Comments 0
You need to be logged in to leave comments.
Login now