Rev 3445: (mbp) BzrDir controls file modes, not LockableFiles in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Wed May 21 11:41:49 BST 2008
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 3445
revision-id:pqm at pqm.ubuntu.com-20080521104134-beoquporep2cpghs
parent: pqm at pqm.ubuntu.com-20080521081407-ohffv2bn288gd515
parent: mbp at sourcefrog.net-20080521030559-z70xlb8mpj5hk027
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2008-05-21 11:41:34 +0100
message:
(mbp) BzrDir controls file modes, not LockableFiles
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/lockable_files.py control_files.py-20051111201905-bb88546e799d669f
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repofmt/weaverepo.py presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/branch_implementations/test_permissions.py test_permissions.py-20060210110243-245c01403bf0fde6
bzrlib/tests/test_permissions.py test_permissions.py-20051215004520-ccf475789c80e80c
bzrlib/workingtree.py workingtree.py-20050511021032-29b6ec0a681e02e3
------------------------------------------------------------
revno: 3416.2.6
revision-id:mbp at sourcefrog.net-20080521030559-z70xlb8mpj5hk027
parent: mbp at sourcefrog.net-20080521030110-xcx9y72316480tvo
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: filemodes
timestamp: Wed 2008-05-21 13:05:59 +1000
message:
Remove obsolete LockableFiles._set_file_mode and _set_dir_mode
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/lockable_files.py control_files.py-20051111201905-bb88546e799d669f
bzrlib/tests/test_permissions.py test_permissions.py-20051215004520-ccf475789c80e80c
------------------------------------------------------------
revno: 3416.2.5
revision-id:mbp at sourcefrog.net-20080521030110-xcx9y72316480tvo
parent: mbp at sourcefrog.net-20080521025920-90v48vtksrcdksjk
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: filemodes
timestamp: Wed 2008-05-21 13:01:10 +1000
message:
Correction to branch permissions test
modified:
bzrlib/tests/branch_implementations/test_permissions.py test_permissions.py-20060210110243-245c01403bf0fde6
------------------------------------------------------------
revno: 3416.2.4
revision-id:mbp at sourcefrog.net-20080521025920-90v48vtksrcdksjk
parent: mbp at sourcefrog.net-20080512054751-qbgg72vppg2xl8qk
parent: pqm at pqm.ubuntu.com-20080520210027-wetfxldz1ggc5u2a
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: filemodes
timestamp: Wed 2008-05-21 12:59:20 +1000
message:
merge trunk
added:
bzrlib/smart/message.py message.py-20080222013625-ncqmh3nrxjkxab87-1
bzrlib/tests/repository_implementations/test_get_parent_map.py test_get_parent_map.-20080421172708-x1z6ot341osr0jq1-1
doc/developers/repository-stream.txt repositorystream.txt-20080410222511-nh6b9bvscvcerh48-1
doc/en/user-guide/bzrtools_plugin.txt bzrtools_plugin.txt-20080509065016-cjc90f46407vi9a0-1
doc/en/user-guide/svn_plugin.txt svn_plugin.txt-20080509065016-cjc90f46407vi9a0-2
doc/en/user-guide/web_browsing.txt web_browsing.txt-20080509065016-cjc90f46407vi9a0-3
doc/es/ es-20080504181154-x2fm3oprvjohiz7n-1
doc/es/guia-desarrollador/ guiadesarrollador-20080504181514-qlh50dq1mj769bic-1
doc/es/guia-usuario/ guiausuario-20080504181514-qlh50dq1mj769bic-2
doc/es/guia-usuario/index.txt index.txt-20080512005856-hgdxkh9xo58n7zdp-2
doc/es/guia-usuario/resolving_conflicts.txt conflicts.txt-20080504181626-aqnzjwfhpju5ypfe-1
doc/es/guia-usuario/version_info.txt version_info.txt-20080504181730-u24nugzokrcrk1bf-1
doc/es/mini-tutorial/ minitutorial-20080504181514-qlh50dq1mj769bic-3
doc/es/mini-tutorial/index.txt index.txt-20080504182136-wmoc35u2t6kom8ca-1
doc/es/notas-version/ notasversion-20080504181514-qlh50dq1mj769bic-4
doc/es/referencia/ referencia-20080504181514-qlh50dq1mj769bic-5
doc/es/referencia-rapida/ referenciarapida-20080504181514-qlh50dq1mj769bic-6
doc/es/referencia-rapida/Makefile makefile-20080506002609-y60mr4avuqwzlf4s-1
doc/es/referencia-rapida/referencia-rapida.svg referenciarapida.svg-20080506002609-y60mr4avuqwzlf4s-2
doc/index.es.txt index.es.txt-20080506002113-aunzdhptcoc0h6hm-1
renamed:
doc/en/user-guide/best_practice_intro.txt => doc/en/user-guide/part2_intro.txt best_practice_intro.-20071123154453-dk2mjhrg1vpjm5w2-1
modified:
Makefile Makefile-20050805140406-d96e3498bb61c5bb
NEWS NEWS-20050323055033-4e00b5db738777ff
bzr bzr.py-20050313053754-5485f144c7006fa6
bzrlib/__init__.py __init__.py-20050309040759-33e65acf91bbcd5d
bzrlib/builtins.py builtins.py-20050830033751-fc01482b9ca23183
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/commands.py bzr.py-20050309040720-d10f4714595cf8c3
bzrlib/config.py config.py-20051011043216-070c74f4e9e338e8
bzrlib/doc/__init__.py __init__.py-20051224020731-eb3eb3ef5b4570df
bzrlib/doc/api/__init__.py __init__.py-20051224020744-7b87d590843855bc
bzrlib/errors.py errors.py-20050309040759-20512168c4e14fbd
bzrlib/fetch.py fetch.py-20050818234941-26fea6105696365d
bzrlib/help_topics/en/authentication.txt authentication_conf.-20071104135035-glfv0ri355tyg1nf-1
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/log.py log.py-20050505065812-c40ce11702fe5fb1
bzrlib/missing.py missing.py-20050812153334-097f7097e2a8bcd1
bzrlib/plugin.py plugin.py-20050622060424-829b654519533d69
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/repofmt/knitrepo.py knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repofmt/weaverepo.py presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/revision.py revision.py-20050309040759-e77802c08f3999d5
bzrlib/smart/client.py client.py-20061116014825-2k6ada6xgulslami-1
bzrlib/smart/medium.py medium.py-20061103051856-rgu2huy59fkz902q-1
bzrlib/smart/protocol.py protocol.py-20061108035435-ot0lstk2590yqhzr-1
bzrlib/smart/request.py request.py-20061108095550-gunadhxmzkdjfeek-1
bzrlib/store/__init__.py store.py-20050309040759-164dc5173d6406c2
bzrlib/store/versioned/__init__.py weavestore.py-20050907094258-88262e0434babab9
bzrlib/symbol_versioning.py symbol_versioning.py-20060105104851-9ecf8af605d15a80
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/blackbox/__init__.py __init__.py-20051128053524-eba30d8255e08dc3
bzrlib/tests/blackbox/test_missing.py test_missing.py-20051211212735-a2cf4c1840bb84c4
bzrlib/tests/blackbox/test_selftest.py test_selftest.py-20060123024542-01c5f1bbcb596d78
bzrlib/tests/blackbox/test_serve.py test_serve.py-20060913064329-8t2pvmsikl4s3xhl-1
bzrlib/tests/branch_implementations/__init__.py __init__.py-20060123013057-b12a52c3f361daf4
bzrlib/tests/bzrdir_implementations/__init__.py __init__.py-20060131065642-34c39b54f42dd048
bzrlib/tests/commands/__init__.py __init__.py-20070520095518-ecfl8531fxgjeycj-1
bzrlib/tests/http_utils.py HTTPTestUtil.py-20050914180604-247d3aafb7a43343
bzrlib/tests/interrepository_implementations/__init__.py __init__.py-20060220054744-baf49a1f88f17b1a
bzrlib/tests/interrepository_implementations/test_fetch.py test_fetch.py-20080425213627-j60cjh782ufm83ry-1
bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
bzrlib/tests/intertree_implementations/__init__.py __init__.py-20060724101752-09ysswo1a92uqyoz-3
bzrlib/tests/interversionedfile_implementations/__init__.py __init__.py-20060302012326-981af525594d02ed
bzrlib/tests/interversionedfile_implementations/test_join.py test_join.py-20060302012326-9b5e9b0f0a03fedc
bzrlib/tests/inventory_implementations/__init__.py __init__.py-20070821044532-olbadbokgv3qv1yd-1
bzrlib/tests/per_lock/__init__.py __init__.py-20070314201444-u92yjsqrkh2m3qcb-1
bzrlib/tests/repository_implementations/__init__.py __init__.py-20060131092037-9564957a7d4a841b
bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
bzrlib/tests/revisionstore_implementations/__init__.py __init__.py-20060303020702-976c4186a0f99edb
bzrlib/tests/test_config.py testconfig.py-20051011041908-742d0c15d8d8c8eb
bzrlib/tests/test_errors.py test_errors.py-20060210110251-41aba2deddf936a8
bzrlib/tests/test_http.py testhttp.py-20051018020158-b2eef6e867c514d9
bzrlib/tests/test_knit.py test_knit.py-20051212171302-95d4c00dd5f11f2b
bzrlib/tests/test_missing.py test_missing.py-20051212000028-694fa4f658a81f48
bzrlib/tests/test_read_bundle.py test_read_bundle.py-20060615211421-ud8cwr1ulgd914zf-1
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
bzrlib/tests/test_revision.py testrevision.py-20050804210559-46f5e1eb67b01289
bzrlib/tests/test_selftest.py test_selftest.py-20051202044319-c110a115d8c0456a
bzrlib/tests/test_smart_transport.py test_ssh_transport.py-20060608202016-c25gvf1ob7ypbus6-2
bzrlib/tests/test_strace.py test_strace.py-20070323001526-6zquhhw8leb9m6j8-2
bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
bzrlib/tests/test_weave.py testknit.py-20050627023648-9833cc5562ffb785
bzrlib/tests/tree_implementations/__init__.py __init__.py-20060717075546-420s7b0bj9hzeowi-2
bzrlib/tests/workingtree_implementations/__init__.py __init__.py-20060203003124-b2aa5aca21a8bfad
bzrlib/trace.py trace.py-20050309040759-c8ed824bdcd4748a
bzrlib/transport/__init__.py transport.py-20050711165921-4978aa7ce1285ad5
bzrlib/transport/ftp.py ftp.py-20051116161804-58dc9506548c2a53
bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
bzrlib/transport/http/_pycurl.py pycurlhttp.py-20060110060940-4e2a705911af77a6
bzrlib/transport/http/_urllib.py _urlgrabber.py-20060113083826-0bbf7d992fbf090c
bzrlib/transport/http/_urllib2_wrappers.py _urllib2_wrappers.py-20060913231729-ha9ugi48ktx481ao-1
bzrlib/transport/http/wsgi.py wsgi.py-20061005091552-rz8pva0olkxv0sd8-2
bzrlib/transport/remote.py ssh.py-20060608202016-c25gvf1ob7ypbus6-1
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
bzrlib/weave.py knit.py-20050627021749-759c29984154256b
doc/developers/HACKING.txt HACKING-20050805200004-2a5dc975d870f78c
doc/developers/authentication-ring.txt authring.txt-20070718200437-q5tdik0ne6lor86d-1
doc/developers/index.txt index.txt-20070508041241-qznziunkg0nffhiw-1
doc/developers/network-protocol.txt networkprotocol.txt-20070903044232-woustorrjbmg5zol-1
doc/en/user-guide/bug_trackers.txt bug_trackers.txt-20070713223459-khxdlcudraii95uv-1
doc/en/user-guide/configuring_bazaar.txt configuring_bazaar.t-20071128000722-ncxiua259xwbdbg7-1
doc/en/user-guide/distributed_intro.txt distributed_intro.tx-20071123154453-dk2mjhrg1vpjm5w2-2
doc/en/user-guide/index.txt index.txt-20060622101119-tgwtdci8z769bjb9-2
doc/en/user-guide/introducing_bazaar.txt introducing_bazaar.t-20071114035000-q36a9h57ps06uvnl-5
doc/index.txt index.txt-20070813101924-07gd9i9d2jt124bf-1
doc/en/user-guide/part2_intro.txt best_practice_intro.-20071123154453-dk2mjhrg1vpjm5w2-1
------------------------------------------------------------
revno: 3416.2.3
revision-id:mbp at sourcefrog.net-20080512054751-qbgg72vppg2xl8qk
parent: mbp at sourcefrog.net-20080512054644-b203t92q8kv8x9ic
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: filemodes
timestamp: Mon 2008-05-12 15:47:51 +1000
message:
typo
modified:
bzrlib/repofmt/weaverepo.py presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
------------------------------------------------------------
revno: 3416.2.2
revision-id:mbp at sourcefrog.net-20080512054644-b203t92q8kv8x9ic
parent: mbp at sourcefrog.net-20080512052343-jxvf7mlhzo3kftjq
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: filemodes
timestamp: Mon 2008-05-12 15:46:44 +1000
message:
Change some callers to get file and directory permissions from bzrdir not LockableFiles
modified:
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repofmt/weaverepo.py presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/branch_implementations/test_permissions.py test_permissions.py-20060210110243-245c01403bf0fde6
bzrlib/workingtree.py workingtree.py-20050511021032-29b6ec0a681e02e3
------------------------------------------------------------
revno: 3416.2.1
revision-id:mbp at sourcefrog.net-20080512052343-jxvf7mlhzo3kftjq
parent: pqm at pqm.ubuntu.com-20080508082241-zyx68bbzrgnlhw9m
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: filemodes
timestamp: Mon 2008-05-12 15:23:43 +1000
message:
Add BzrDir._get_file_mode and _get_dir_mode
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/lockable_files.py control_files.py-20051111201905-bb88546e799d669f
bzrlib/tests/test_permissions.py test_permissions.py-20051215004520-ccf475789c80e80c
=== modified file 'NEWS'
--- a/NEWS 2008-05-21 08:14:07 +0000
+++ b/NEWS 2008-05-21 10:41:34 +0000
@@ -78,7 +78,7 @@
INTERNALS:
- API BREAKS:
+ API CHANGES:
* ``bzr missing --mine-only`` will return status code 0 if you have no
new revisions, but the remote does. Similarly for ``--theirs-only``.
@@ -95,6 +95,13 @@
``base`` parameter. ``SmartClientMedium`` implementations now also need
to provide a ``remote_path_from_transport`` method. (Andrew Bennetts)
+ * The default permissions for creating new files and directories
+ should now be obtained from ``BzrDir._get_file_mode()`` and
+ ``_get_dir_mode()``, rather than from LockableFiles. The ``_set_file_mode``
+ and ``_set_dir_mode`` variables on LockableFiles which were advertised
+ as a way for plugins to control this are no longer consulted.
+ (Martin Pool)
+
* ``VersionedFile.join`` is deprecated. This method required local
instances of both versioned file objects and was thus hostile to being
used for streaming from a smart server. The new get_record_stream and
=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py 2008-05-19 08:42:32 +0000
+++ b/bzrlib/bzrdir.py 2008-05-21 02:59:20 +0000
@@ -1,4 +1,4 @@
-# Copyright (C) 2005, 2006, 2007 Canonical Ltd
+# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -94,6 +94,8 @@
root_transport
a transport connected to the directory this bzr was opened from
(i.e. the parent directory holding the .bzr directory).
+
+ Everything in the bzrdir should have the same file permissions.
"""
def break_lock(self):
@@ -312,7 +314,6 @@
branches.append(branch)
return branches
-
def destroy_repository(self):
"""Destroy the repository in this BzrDir"""
raise NotImplementedError(self.destroy_repository)
@@ -582,6 +583,45 @@
guaranteed to point to an existing directory ready for use.
"""
raise NotImplementedError(self.get_branch_transport)
+
+ def _find_creation_modes(self):
+ """Determine the appropriate modes for files and directories.
+
+ They're always set to be consistent with the base directory,
+ assuming that this transport allows setting modes.
+ """
+ # TODO: Do we need or want an option (maybe a config setting) to turn
+ # this off or override it for particular locations? -- mbp 20080512
+ if self._mode_check_done:
+ return
+ self._mode_check_done = True
+ try:
+ st = self.transport.stat('.')
+ except errors.TransportNotPossible:
+ self._dir_mode = None
+ self._file_mode = None
+ else:
+ # Check the directory mode, but also make sure the created
+ # directories and files are read-write for this user. This is
+ # mostly a workaround for filesystems which lie about being able to
+ # write to a directory (cygwin & win32)
+ self._dir_mode = (st.st_mode & 07777) | 00700
+ # Remove the sticky and execute bits for files
+ self._file_mode = self._dir_mode & ~07111
+
+ def _get_file_mode(self):
+ """Return Unix mode for newly created files, or None.
+ """
+ if not self._mode_check_done:
+ self._find_creation_modes()
+ return self._file_mode
+
+ def _get_dir_mode(self):
+ """Return Unix mode for newly created directories, or None.
+ """
+ if not self._mode_check_done:
+ self._find_creation_modes()
+ return self._dir_mode
def get_repository_transport(self, repository_format):
"""Get the transport for use by repository format in this BzrDir.
@@ -621,6 +661,7 @@
self._format = _format
self.transport = _transport.clone('.bzr')
self.root_transport = _transport
+ self._mode_check_done = False
def is_control_filename(self, filename):
"""True if filename is the name of a path which is reserved for bzrdir's.
@@ -2231,8 +2272,8 @@
if name.startswith('basis-inventory.'):
self.garbage_inventories.append(name)
# create new directories for repository, working tree and branch
- self.dir_mode = self.bzrdir._control_files._dir_mode
- self.file_mode = self.bzrdir._control_files._file_mode
+ self.dir_mode = self.bzrdir._get_dir_mode()
+ self.file_mode = self.bzrdir._get_file_mode()
repository_names = [('inventory.weave', True),
('revision-store', True),
('weaves', True)]
=== modified file 'bzrlib/lockable_files.py'
--- a/bzrlib/lockable_files.py 2008-05-08 04:33:38 +0000
+++ b/bzrlib/lockable_files.py 2008-05-21 03:05:59 +0000
@@ -66,11 +66,6 @@
# _lock_count: If _lock_mode is true, a positive count of the number of
# times the lock has been taken *by this process*.
- # If set to False (by a plugin, etc) BzrBranch will not set the
- # mode on created files or directories
- _set_file_mode = True
- _set_dir_mode = True
-
def __init__(self, transport, lock_name, lock_class):
"""Create a LockableFiles group
@@ -126,7 +121,10 @@
return urlutils.escape(safe_unicode(file_or_path))
def _find_modes(self):
- """Determine the appropriate modes for files and directories."""
+ """Determine the appropriate modes for files and directories.
+
+ :deprecated: Replaced by BzrDir._find_modes.
+ """
try:
st = self._transport.stat('.')
except errors.TransportNotPossible:
@@ -140,10 +138,6 @@
self._dir_mode = (st.st_mode & 07777) | 00700
# Remove the sticky and execute bits for files
self._file_mode = self._dir_mode & ~07111
- if not self._set_dir_mode:
- self._dir_mode = None
- if not self._set_file_mode:
- self._file_mode = None
def controlfilename(self, file_or_path):
"""Return location relative to branch."""
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py 2008-05-19 18:56:45 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2008-05-21 02:59:20 +0000
@@ -604,7 +604,7 @@
return NewPack(self._pack_collection._upload_transport,
self._pack_collection._index_transport,
self._pack_collection._pack_transport, upload_suffix=self.suffix,
- file_mode=self._pack_collection.repo.control_files._file_mode)
+ file_mode=self._pack_collection.repo.bzrdir._get_file_mode())
def _copy_revision_texts(self):
"""Copy revision data to the new pack."""
@@ -1586,7 +1586,7 @@
for key, value in disk_nodes:
builder.add_node(key, value)
self.transport.put_file('pack-names', builder.finish(),
- mode=self.repo.control_files._file_mode)
+ mode=self.repo.bzrdir._get_file_mode())
# move the baseline forward
self._packs_at_load = disk_nodes
# now clear out the obsolete packs directory
@@ -1630,7 +1630,7 @@
raise errors.NotWriteLocked(self)
self._new_pack = NewPack(self._upload_transport, self._index_transport,
self._pack_transport, upload_suffix='.pack',
- file_mode=self.repo.control_files._file_mode)
+ file_mode=self.repo.bzrdir._get_file_mode())
# allow writing: queue writes to a new index
self.revision_index.add_writable_index(self._new_pack.revision_index,
self._new_pack)
@@ -1713,7 +1713,7 @@
add_callback=add_callback)
self.repo._revision_knit = knit.KnitVersionedFile(
'revisions', self.transport.clone('..'),
- self.repo.control_files._file_mode,
+ self.repo.bzrdir._get_file_mode(),
create=False,
index=knit_index, delta=False, factory=knit.KnitPlainFactory(),
access_method=self.repo._pack_collection.revision_index.knit_access)
@@ -1731,7 +1731,7 @@
add_callback=add_callback, parents=False)
self.repo._signature_knit = knit.KnitVersionedFile(
'signatures', self.transport.clone('..'),
- self.repo.control_files._file_mode,
+ self.repo.bzrdir._get_file_mode(),
create=False,
index=knit_index, delta=False, factory=knit.KnitPlainFactory(),
access_method=self.repo._pack_collection.signature_index.knit_access)
@@ -1820,7 +1820,7 @@
add_callback=add_callback, deltas=True, parents=True)
return knit.KnitVersionedFile(
'inventory', self.transport.clone('..'),
- self.repo.control_files._file_mode,
+ self.repo.bzrdir._get_file_mode(),
create=False,
index=knit_index, delta=True, factory=knit.KnitPlainFactory(),
access_method=self.repo._pack_collection.inventory_index.knit_access)
=== modified file 'bzrlib/repofmt/weaverepo.py'
--- a/bzrlib/repofmt/weaverepo.py 2008-05-12 02:40:40 +0000
+++ b/bzrlib/repofmt/weaverepo.py 2008-05-21 02:59:20 +0000
@@ -52,9 +52,8 @@
_serializer = xml5.serializer_v5
def __init__(self, _format, a_bzrdir, _revision_store, control_store, text_store):
- # we reuse one control files instance.
- dir_mode = a_bzrdir._control_files._dir_mode
- file_mode = a_bzrdir._control_files._file_mode
+ dir_mode = a_bzrdir._get_dir_mode()
+ file_mode = a_bzrdir._get_file_mode()
def get_store(name, compressed=True, prefixed=False):
# FIXME: This approach of assuming stores are all entirely compressed
@@ -298,8 +297,8 @@
'branch-lock', lockable_files.TransportLock)
control_files.create_lock()
control_files.lock_write()
- control_files._transport.mkdir_multi(dirs,
- mode=control_files._dir_mode)
+ a_bzrdir.transport.mkdir_multi(dirs,
+ mode=a_bzrdir._get_dir_mode())
try:
for file, content in files:
control_files.put(file, content)
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2008-05-19 18:56:45 +0000
+++ b/bzrlib/repository.py 2008-05-21 02:59:20 +0000
@@ -1947,8 +1947,6 @@
_revision_store,
control_store,
text_store)
- dir_mode = self.control_files._dir_mode
- file_mode = self.control_files._file_mode
@needs_read_lock
def is_shared(self):
@@ -2212,7 +2210,7 @@
control_files.lock_write()
try:
control_files._transport.mkdir_multi(dirs,
- mode=control_files._dir_mode)
+ mode=a_bzrdir._get_dir_mode())
for file, content in files:
control_files.put(file, content)
for file, content in utf8_files:
=== modified file 'bzrlib/tests/branch_implementations/test_permissions.py'
--- a/bzrlib/tests/branch_implementations/test_permissions.py 2007-03-16 03:20:17 +0000
+++ b/bzrlib/tests/branch_implementations/test_permissions.py 2008-05-21 03:01:10 +0000
@@ -1,5 +1,4 @@
-# Copyright (C) 2005 Canonical Ltd
-# -*- coding: utf-8 -*-
+# Copyright (C) 2005, 2008 Canonical Ltd
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -57,12 +56,16 @@
mode = stat.S_IMODE(os.stat('a').st_mode)
t = self.make_branch_and_tree('.')
b = t.branch
+ self.assertEqualMode(mode, b.bzrdir._get_dir_mode())
+ self.assertEqualMode(mode & ~07111, b.bzrdir._get_file_mode())
self.assertEqualMode(mode, b.control_files._dir_mode)
self.assertEqualMode(mode & ~07111, b.control_files._file_mode)
os.mkdir('b')
os.chmod('b', 02777)
b = self.make_branch('b')
+ self.assertEqualMode(02777, b.bzrdir._get_dir_mode())
+ self.assertEqualMode(00666, b.bzrdir._get_file_mode())
self.assertEqualMode(02777, b.control_files._dir_mode)
self.assertEqualMode(00666, b.control_files._file_mode)
check_mode_r(self, 'b/.bzr', 00666, 02777)
@@ -70,6 +73,8 @@
os.mkdir('c')
os.chmod('c', 02750)
b = self.make_branch('c')
+ self.assertEqualMode(02750, b.bzrdir._get_dir_mode())
+ self.assertEqualMode(00640, b.bzrdir._get_file_mode())
self.assertEqualMode(02750, b.control_files._dir_mode)
self.assertEqualMode(00640, b.control_files._file_mode)
check_mode_r(self, 'c/.bzr', 00640, 02750)
@@ -77,6 +82,8 @@
os.mkdir('d')
os.chmod('d', 0700)
b = self.make_branch('d')
+ self.assertEqualMode(0700, b.bzrdir._get_dir_mode())
+ self.assertEqualMode(0600, b.bzrdir._get_file_mode())
self.assertEqualMode(0700, b.control_files._dir_mode)
self.assertEqualMode(0600, b.control_files._file_mode)
check_mode_r(self, 'd/.bzr', 00600, 00700)
=== modified file 'bzrlib/tests/test_permissions.py'
--- a/bzrlib/tests/test_permissions.py 2008-04-24 07:22:53 +0000
+++ b/bzrlib/tests/test_permissions.py 2008-05-21 03:05:59 +0000
@@ -104,6 +104,8 @@
b = t.branch
self.assertEqualMode(0755, b.control_files._dir_mode)
self.assertEqualMode(0644, b.control_files._file_mode)
+ self.assertEqualMode(0755, b.bzrdir._get_dir_mode())
+ self.assertEqualMode(0644, b.bzrdir._get_file_mode())
# Modifying a file shouldn't break the permissions
open('a', 'wb').write('foo2\n')
@@ -124,6 +126,8 @@
b = t.branch
self.assertEqualMode(0775, b.control_files._dir_mode)
self.assertEqualMode(0664, b.control_files._file_mode)
+ self.assertEqualMode(0775, b.bzrdir._get_dir_mode())
+ self.assertEqualMode(0664, b.bzrdir._get_file_mode())
open('a', 'wb').write('foo3\n')
t.commit('foo3')
@@ -142,6 +146,8 @@
b = t.branch
self.assertEqualMode(02775, b.control_files._dir_mode)
self.assertEqualMode(0664, b.control_files._file_mode)
+ self.assertEqualMode(02775, b.bzrdir._get_dir_mode())
+ self.assertEqualMode(0664, b.bzrdir._get_file_mode())
open('a', 'wb').write('foo4\n')
t.commit('foo4')
@@ -152,43 +158,6 @@
t.commit('new d')
check_mode_r(self, '.bzr', 0664, 02775)
- def test_disable_set_mode(self):
- # TODO: jam 20051215 Ultimately, this test should probably test that
- # extra chmod calls aren't being made
- try:
- transport = get_transport(self.get_url())
- transport.put_bytes('my-lock', '')
- lockable = LockableFiles(transport, 'my-lock', TransportLock)
- self.assertNotEqual(None, lockable._dir_mode)
- self.assertNotEqual(None, lockable._file_mode)
-
- LockableFiles._set_dir_mode = False
- transport = get_transport('.')
- lockable = LockableFiles(transport, 'my-lock', TransportLock)
- self.assertEqual(None, lockable._dir_mode)
- self.assertNotEqual(None, lockable._file_mode)
-
- LockableFiles._set_file_mode = False
- transport = get_transport('.')
- lockable = LockableFiles(transport, 'my-lock', TransportLock)
- self.assertEqual(None, lockable._dir_mode)
- self.assertEqual(None, lockable._file_mode)
-
- LockableFiles._set_dir_mode = True
- transport = get_transport('.')
- lockable = LockableFiles(transport, 'my-lock', TransportLock)
- self.assertNotEqual(None, lockable._dir_mode)
- self.assertEqual(None, lockable._file_mode)
-
- LockableFiles._set_file_mode = True
- transport = get_transport('.')
- lockable = LockableFiles(transport, 'my-lock', TransportLock)
- self.assertNotEqual(None, lockable._dir_mode)
- self.assertNotEqual(None, lockable._file_mode)
- finally:
- LockableFiles._set_dir_mode = True
- LockableFiles._set_file_mode = True
-
class TestSftpPermissions(TestCaseWithSFTPServer):
@@ -217,6 +186,8 @@
b_local = t.branch
self.assertEqualMode(0755, b_local.control_files._dir_mode)
self.assertEqualMode(0644, b_local.control_files._file_mode)
+ self.assertEqualMode(0755, b_local.bzrdir._get_dir_mode())
+ self.assertEqualMode(0644, b_local.bzrdir._get_file_mode())
os.mkdir('sftp')
sftp_url = self.get_url('sftp')
@@ -230,6 +201,8 @@
b_sftp = Branch.open(sftp_url)
self.assertEqualMode(0755, b_sftp.control_files._dir_mode)
self.assertEqualMode(0644, b_sftp.control_files._file_mode)
+ self.assertEqualMode(0755, b_sftp.bzrdir._get_dir_mode())
+ self.assertEqualMode(0644, b_sftp.bzrdir._get_file_mode())
open('local/a', 'wb').write('foo2\n')
t_local.commit('foo2')
@@ -251,6 +224,8 @@
b_sftp = Branch.open(sftp_url)
self.assertEqualMode(0775, b_sftp.control_files._dir_mode)
self.assertEqualMode(0664, b_sftp.control_files._file_mode)
+ self.assertEqualMode(0775, b_sftp.bzrdir._get_dir_mode())
+ self.assertEqualMode(0664, b_sftp.bzrdir._get_file_mode())
open('local/a', 'wb').write('foo3\n')
t_local.commit('foo3')
=== modified file 'bzrlib/workingtree.py'
--- a/bzrlib/workingtree.py 2008-05-08 04:33:38 +0000
+++ b/bzrlib/workingtree.py 2008-05-12 05:46:44 +0000
@@ -224,7 +224,7 @@
wt_trans = self.bzrdir.get_workingtree_transport(None)
cache_filename = wt_trans.local_abspath('stat-cache')
self._hashcache = hashcache.HashCache(basedir, cache_filename,
- self._control_files._file_mode)
+ self.bzrdir._get_file_mode())
hc = self._hashcache
hc.read()
# is this scan needed ? it makes things kinda slow.
More information about the bazaar-commits
mailing list