37
37
class BazaarRepositoryFactory(object):
38
38
"""Responsible for creating repositories for people and projects."""
40
def __init__(self, person_root_dir, project_root_dir,
40
def __init__(self, person_root_dir, project_root_dir,
41
41
deleted_person_dir, deleted_project_dir):
42
42
self.person_root_dir = person_root_dir
43
43
self.project_root_dir = project_root_dir
44
44
self.deleted_person_dir = deleted_person_dir
45
45
self.deleted_project_dir = deleted_project_dir
47
47
ensure_directory_exists(self.person_root_dir)
48
48
ensure_directory_exists(self.project_root_dir)
49
49
ensure_directory_exists(self.deleted_person_dir)
54
54
Get the directory for a users repository, given the username.
56
56
return os.path.join(self.person_root_dir, person_name)
58
58
def get_project_repo_dir(self, project_name):
60
60
Get the directory for a project repository, given the project name.
62
62
return os.path.join(self.project_root_dir, project_name)
64
64
def create_shared_repository_for_person(self, person_name):
65
65
"""Create an empty shared repo for person."""
66
66
dir_name = self.get_user_repo_dir(person_name)
67
create_shared_repo(dir_name)
67
if os.path.exists(dir_name):
68
print "Warning: path '%s' already exists, not creating repository for user '%s'" % (dir_name, person_name)
70
create_shared_repo(dir_name)
69
72
def create_shared_repository_for_project(self, project_name):
70
73
"""Create a repository for the project with a trunk branch."""
74
77
to_transport = repo.user_transport.clone('trunk')
75
78
format = bzrdir.format_registry.make_bzrdir('default')
76
79
branch = bzrdir.BzrDir.create_branch_convenience(
77
to_transport.base, format=format,
80
to_transport.base, format=format,
78
81
possible_transports=[to_transport])
79
82
branch.set_append_revisions_only(True)
81
84
def get_repository_for_project(self, project_name):
82
85
"""Get a bzrlib.repository.Repository object for a given project
85
88
dir_name = self.get_project_repo_dir(project_name)
86
89
return BazaarRepositoryAdaptor(Repository.open(dir_name))
88
91
def get_repository_for_person(self, person_name):
90
93
Get a bzrlib.repository.Repository object for a given person login.
92
95
dir_name = self.get_user_repo_dir(person_name)
93
96
return BazaarRepositoryAdaptor(Repository.open(dir_name))
95
98
def delete_shared_repository_for_person(self, person_name):
97
Delete a personal repository. This function should only be called
100
Delete a personal repository. This function should only be called
98
101
AFTER the user account has been deleted. This function will create a
99
102
copy of the users repository in the personal bzr repo backup folder.
101
104
src_dir = self.get_user_repo_dir(person_name)
102
105
dst_dir = self.get_delete_folder_for_user(person_name)
104
107
copytree(src_dir, dst_dir)
107
110
def delete_shared_repository_for_project(self, project_name):
109
Delete a project repository. This function should only be called
112
Delete a project repository. This function should only be called
110
113
AFTER the project has been deleted. This function will create a
111
114
copy of the project repository in the project repo backup folder.
113
116
src_dir = self.get_project_repo_dir(project_name)
114
117
dst_dir = self.get_delete_folder_for_project(project_name)
116
119
copytree(src_dir, dst_dir)
119
122
def get_delete_folder_for_user(self, person_name):
121
124
Get a path to a directory that does not yet exist, suitable for backing
122
125
up a user repository.
124
127
Directories are in the form <username>-<timestamp>, allowing
125
128
administrators to easily differentiate between multiple user backups over
134
137
dirpath = dirpath[:-2]
135
138
dirpath += '_' + str(attempt)
140
143
def get_delete_folder_for_project(self, project_name):
142
145
Get a path to a directory that does not yet exist, suitable for backing
143
146
up a user repository.
145
148
Directories are in the form <username>-<timestamp>, allowing
146
149
administrators to easily differentiate between multiple user backups over