1# frozen_string_literal: true
2
3module Gitlab
4  module ImportExport
5    extend self
6
7    # For every version update the version history in these docs must be kept up to date:
8    # - development/import_export.md
9    # - user/project/settings/import_export.md
10    VERSION = '0.2.4'
11    FILENAME_LIMIT = 50
12
13    def export_path(relative_path:)
14      File.join(storage_path, relative_path)
15    end
16
17    def storage_path
18      File.join(Settings.shared['path'], 'tmp/gitlab_exports')
19    end
20
21    def import_upload_path(filename:)
22      File.join(storage_path, 'uploads', filename)
23    end
24
25    def project_filename
26      "project.json"
27    end
28
29    def project_bundle_filename
30      "project.bundle"
31    end
32
33    def lfs_objects_filename
34      "lfs-objects.json"
35    end
36
37    def lfs_objects_storage
38      "lfs-objects"
39    end
40
41    def wiki_repo_bundle_filename
42      "project.wiki.bundle"
43    end
44
45    def design_repo_bundle_filename
46      'project.design.bundle'
47    end
48
49    def snippet_repo_bundle_dir
50      'snippets'
51    end
52
53    def snippets_repo_bundle_path(absolute_path)
54      File.join(absolute_path, ::Gitlab::ImportExport.snippet_repo_bundle_dir)
55    end
56
57    def snippet_repo_bundle_filename_for(snippet)
58      "#{snippet.hexdigest}.bundle"
59    end
60
61    def config_file
62      Rails.root.join('lib/gitlab/import_export/project/import_export.yml')
63    end
64
65    def version_filename
66      'VERSION'
67    end
68
69    def gitlab_version_filename
70      'GITLAB_VERSION'
71    end
72
73    def gitlab_revision_filename
74      'GITLAB_REVISION'
75    end
76
77    def export_filename(exportable:)
78      basename = "#{Time.now.strftime('%Y-%m-%d_%H-%M-%3N')}_#{exportable.full_path.tr('/', '_')}"
79
80      "#{basename[0..FILENAME_LIMIT]}_export.tar.gz"
81    end
82
83    def version
84      VERSION
85    end
86
87    def reset_tokens?
88      true
89    end
90
91    def group_filename
92      'group.json'
93    end
94
95    def legacy_group_config_file
96      Rails.root.join('lib/gitlab/import_export/group/legacy_import_export.yml')
97    end
98
99    def group_config_file
100      Rails.root.join('lib/gitlab/import_export/group/import_export.yml')
101    end
102
103    def group_wiki_repo_bundle_filename(group_id)
104      "#{group_id}.wiki.bundle"
105    end
106
107    def group_wiki_repo_bundle_path(shared, filename)
108      File.join(shared.export_path, 'repositories', filename)
109    end
110
111    def group_wiki_repo_bundle_full_path(shared, group_id)
112      group_wiki_repo_bundle_path(shared, group_wiki_repo_bundle_filename(group_id))
113    end
114  end
115end
116
117Gitlab::ImportExport.prepend_mod
118