~yeliabmas/sloecode/bug-fix

« back to all changes in this revision

Viewing changes to sloecode/bzr/factory.py

  • Committer: Thomi Richards
  • Date: 2011-06-18 22:06:36 UTC
  • mfrom: (108 trunk)
  • mto: This revision was merged to the branch mainline in revision 109.
  • Revision ID: thomir@gmail.com-20110618220636-5v3rnrao3er30arg
Ignoring built documentation.

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
 
12
12
def ensure_directory_exists(dir_name):
13
13
    """Make a directory if it doesn't already exist.
14
 
    
 
14
 
15
15
    Throws RuntimeError if the path already exists as something other
16
16
    than a directory (a file, for example).
17
17
    """
37
37
class BazaarRepositoryFactory(object):
38
38
    """Responsible for creating repositories for people and projects."""
39
39
 
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
46
 
        
 
46
 
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.
55
55
        """
56
56
        return os.path.join(self.person_root_dir, person_name)
57
 
    
 
57
 
58
58
    def get_project_repo_dir(self, project_name):
59
59
        """
60
60
        Get the directory for a project repository, given the project name.
61
61
        """
62
62
        return os.path.join(self.project_root_dir, project_name)
63
 
    
 
63
 
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)
 
69
        else:
 
70
            create_shared_repo(dir_name)
68
71
 
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)
80
 
        
 
83
 
81
84
    def get_repository_for_project(self, project_name):
82
85
        """Get a bzrlib.repository.Repository object for a given project
83
86
        name.
84
87
        """
85
88
        dir_name = self.get_project_repo_dir(project_name)
86
89
        return BazaarRepositoryAdaptor(Repository.open(dir_name))
87
 
        
 
90
 
88
91
    def get_repository_for_person(self, person_name):
89
92
        """
90
93
        Get a bzrlib.repository.Repository object for a given person login.
91
94
        """
92
95
        dir_name = self.get_user_repo_dir(person_name)
93
96
        return BazaarRepositoryAdaptor(Repository.open(dir_name))
94
 
    
 
97
 
95
98
    def delete_shared_repository_for_person(self, person_name):
96
99
        """
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.
100
103
        """
101
104
        src_dir = self.get_user_repo_dir(person_name)
102
105
        dst_dir = self.get_delete_folder_for_user(person_name)
103
 
        
 
106
 
104
107
        copytree(src_dir, dst_dir)
105
108
        rmtree(src_dir)
106
 
        
 
109
 
107
110
    def delete_shared_repository_for_project(self, project_name):
108
111
        """
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.
112
115
        """
113
116
        src_dir = self.get_project_repo_dir(project_name)
114
117
        dst_dir = self.get_delete_folder_for_project(project_name)
115
 
        
 
118
 
116
119
        copytree(src_dir, dst_dir)
117
120
        rmtree(src_dir)
118
 
        
 
121
 
119
122
    def get_delete_folder_for_user(self, person_name):
120
123
        """
121
124
        Get a path to a directory that does not yet exist, suitable for backing
122
125
        up a user repository.
123
 
        
 
126
 
124
127
        Directories are in the form <username>-<timestamp>, allowing
125
128
        administrators to easily differentiate between multiple user backups over
126
129
        time.
134
137
                dirpath = dirpath[:-2]
135
138
            dirpath += '_' + str(attempt)
136
139
            attempt += 1
137
 
            
 
140
 
138
141
        return dirpath
139
 
    
 
142
 
140
143
    def get_delete_folder_for_project(self, project_name):
141
144
        """
142
145
        Get a path to a directory that does not yet exist, suitable for backing
143
146
        up a user repository.
144
 
        
 
147
 
145
148
        Directories are in the form <username>-<timestamp>, allowing
146
149
        administrators to easily differentiate between multiple user backups over
147
150
        time.
155
158
                dirpath = dirpath[:-2]
156
159
            dirpath += '_' + str(attempt)
157
160
            attempt += 1
158
 
            
159
161
        return dirpath