35
37
class BazaarRepositoryFactory(object):
36
38
"""Responsible for creating repositories for people and projects."""
38
def __init__(self, person_root_dir, project_root_dir):
40
def __init__(self, person_root_dir, project_root_dir,
41
deleted_person_dir, deleted_project_dir):
39
42
self.person_root_dir = person_root_dir
40
43
self.project_root_dir = project_root_dir
44
self.deleted_person_dir = deleted_person_dir
45
self.deleted_project_dir = deleted_project_dir
41
47
ensure_directory_exists(self.person_root_dir)
42
48
ensure_directory_exists(self.project_root_dir)
49
ensure_directory_exists(self.deleted_person_dir)
50
ensure_directory_exists(self.deleted_project_dir)
52
def get_user_repo_dir(self, person_name):
54
Get the directory for a users repository, given the username.
56
return os.path.join(self.person_root_dir, person_name)
58
def get_project_repo_dir(self, project_name):
60
Get the directory for a project repository, given the project name.
62
return os.path.join(self.project_root_dir, project_name)
44
64
def create_shared_repository_for_person(self, person_name):
45
65
"""Create an empty shared repo for person."""
46
dir_name = os.path.join(self.person_root_dir, person_name)
66
dir_name = self.get_user_repo_dir(person_name)
47
67
create_shared_repo(dir_name)
49
69
def create_shared_repository_for_project(self, project_name):
50
70
"""Create a repository for the project with a trunk branch."""
51
dir_name = os.path.join(self.project_root_dir, project_name)
71
dir_name = self.get_project_repo_dir(project_name)
52
72
repo = create_shared_repo(dir_name)
53
73
# Now to create the trunk.
54
74
to_transport = repo.user_transport.clone('trunk')
62
82
"""Get a bzrlib.repository.Repository object for a given project
65
dir_name = os.path.join(self.project_root_dir, project_name)
85
dir_name = self.get_project_repo_dir(person_name)
66
86
return BazaarRepositoryAdaptor(Repository.open(dir_name))
68
88
def get_repository_for_person(self, person_name):
69
"""Get a bzrlib.repository.Repository object for a given person
72
dir_name = os.path.join(self.person_root_dir, person_name)
90
Get a bzrlib.repository.Repository object for a given person login.
92
dir_name = self.get_user_repo_dir(person_name)
73
93
return BazaarRepositoryAdaptor(Repository.open(dir_name))
95
def delete_shared_repository_for_person(self, person_name):
97
Delete a personal repository. This function should only be called
98
AFTER the user account has been deleted. This function will create a
99
copy of the users repository in the personal bzr repo backup folder.
101
src_dir = self.get_user_repo_dir(person_name)
102
dst_dir = self.get_delete_folder_for_user(person_name)
104
copytree(src_dir, dst_dir)
107
def delete_shared_repository_for_project(self, project_name):
109
Delete a project repository. This function should only be called
110
AFTER the project has been deleted. This function will create a
111
copy of the project repository in the project repo backup folder.
113
src_dir = self.get_project_repo_dir(project_name)
114
dst_dir = self.get_delete_folder_for_project(project_name)
116
copytree(src_dir, dst_dir)
119
def get_delete_folder_for_user(self, person_name):
121
Get a path to a directory that does not yet exist, suitable for backing
122
up a user repository.
124
Directories are in the form <username>-<timestamp>, allowing
125
administrators to easily differentiate between multiple user backups over
128
dt = datetime.utcnow()
129
dirname = person_name + '-' + dt.strftime("%Y-%M-%d_%H%M%S")
130
dirpath = os.path.join(self.deleted_person_dir, dirname)
132
while (os.path.exists(dirpath)):
134
dirpath = dirpath[:-2]
135
dirpath += '_' + str(attempt)
140
def get_delete_folder_for_project(self, project_name):
142
Get a path to a directory that does not yet exist, suitable for backing
143
up a user repository.
145
Directories are in the form <username>-<timestamp>, allowing
146
administrators to easily differentiate between multiple user backups over
149
dt = datetime.utcnow()
150
dirname = project_name + '-' + dt.strftime("%Y-%M-%d_%H%M%S")
151
dirpath = os.path.join(self.deleted_project_dir, dirname)
153
while (os.path.exists(dirpath)):
155
dirpath = dirpath[:-2]
156
dirpath += '_' + str(attempt)
b'\\ No newline at end of file'