126
126
def __init__(self, transport, lockfiles, gitrepo, format):
127
127
self._format = format
128
128
self.root_transport = transport
129
self._mode_check_done = False
129
130
self._git = gitrepo
131
132
self.transport = transport
262
263
return self.open_repository()
265
def _find_creation_modes(self):
266
"""Determine the appropriate modes for files and directories.
268
They're always set to be consistent with the base directory,
269
assuming that this transport allows setting modes.
271
# TODO: Do we need or want an option (maybe a config setting) to turn
272
# this off or override it for particular locations? -- mbp 20080512
273
if self._mode_check_done:
275
self._mode_check_done = True
277
st = self.transport.stat('.')
278
except TransportNotPossible:
279
self._dir_mode = None
280
self._file_mode = None
282
# Check the directory mode, but also make sure the created
283
# directories and files are read-write for this user. This is
284
# mostly a workaround for filesystems which lie about being able to
285
# write to a directory (cygwin & win32)
286
if (st.st_mode & 07777 == 00000):
287
# FTP allows stat but does not return dir/file modes
288
self._dir_mode = None
289
self._file_mode = None
291
self._dir_mode = (st.st_mode & 07777) | 00700
292
# Remove the sticky and execute bits for files
293
self._file_mode = self._dir_mode & ~07111
295
def _get_file_mode(self):
296
"""Return Unix mode for newly created files, or None.
298
if not self._mode_check_done:
299
self._find_creation_modes()
300
return self._file_mode
302
def _get_dir_mode(self):
303
"""Return Unix mode for newly created directories, or None.
305
if not self._mode_check_done:
306
self._find_creation_modes()
307
return self._dir_mode