Rev 6362: (jelmer) Deal with the obsolete_packs directory being removed from under us. in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
Patch Queue Manager
pqm at pqm.ubuntu.com
Mon Dec 12 15:12:08 UTC 2011
At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 6362 [merge]
revision-id: pqm at pqm.ubuntu.com-20111212151207-xiz0tu02z1hxrq76
parent: pqm at pqm.ubuntu.com-20111212144703-suptg74yxhcpon4p
parent: jelmer at samba.org-20111212134420-20130h4aa5ewp2m7
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2011-12-12 15:12:07 +0000
message:
(jelmer) Deal with the obsolete_packs directory being removed from under us.
(Jelmer Vernooij)
modified:
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
doc/en/release-notes/bzr-2.5.txt bzr2.5.txt-20110708125756-587p0hpw7oke4h05-1
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py 2011-12-07 14:03:01 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2011-12-12 13:44:20 +0000
@@ -1221,8 +1221,18 @@
"""
for pack in packs:
try:
- pack.pack_transport.move(pack.file_name(),
- '../obsolete_packs/' + pack.file_name())
+ try:
+ pack.pack_transport.move(pack.file_name(),
+ '../obsolete_packs/' + pack.file_name())
+ except errors.NoSuchFile:
+ # perhaps obsolete_packs was removed? Let's create it and
+ # try again
+ try:
+ pack.pack_transport.mkdir('../obsolete_packs/')
+ except errors.FileExists:
+ pass
+ pack.pack_transport.move(pack.file_name(),
+ '../obsolete_packs/' + pack.file_name())
except (errors.PathError, errors.TransportError), e:
# TODO: Should these be warnings or mutters?
mutter("couldn't rename obsolete pack, skipping it:\n%s"
@@ -1494,7 +1504,11 @@
obsolete_pack_transport = self.transport.clone('obsolete_packs')
if preserve is None:
preserve = set()
- for filename in obsolete_pack_transport.list_dir('.'):
+ try:
+ obsolete_pack_files = obsolete_pack_transport.list_dir('.')
+ except errors.NoSuchFile:
+ return found
+ for filename in obsolete_pack_files:
name, ext = osutils.splitext(filename)
if ext == '.pack':
found.append(name)
=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py 2011-12-11 03:42:09 +0000
+++ b/bzrlib/tests/test_repository.py 2011-12-12 13:44:20 +0000
@@ -1082,6 +1082,23 @@
sorted(set([osutils.splitext(n)[0] for n in
packs._index_transport.list_dir('.')])))
+ def test__obsolete_packs_missing_directory(self):
+ tree, r, packs, revs = self.make_packs_and_alt_repo(write_lock=True)
+ r.control_transport.rmdir('obsolete_packs')
+ names = packs.names()
+ pack = packs.get_pack_by_name(names[0])
+ # Schedule this one for removal
+ packs._remove_pack_from_memory(pack)
+ # Now trigger the obsoletion, and ensure that all the remaining files
+ # are still renamed
+ packs._obsolete_packs([pack])
+ self.assertEqual([n + '.pack' for n in names[1:]],
+ sorted(packs._pack_transport.list_dir('.')))
+ # names[0] should not be present in the index anymore
+ self.assertEqual(names[1:],
+ sorted(set([osutils.splitext(n)[0] for n in
+ packs._index_transport.list_dir('.')])))
+
def test_pack_distribution_zero(self):
packs = self.get_packs()
self.assertEqual([0], packs.pack_distribution(0))
@@ -1357,6 +1374,12 @@
obsolete_names = set([osutils.splitext(n)[0] for n in obsolete_packs])
self.assertEqual([pack.name], sorted(obsolete_names))
+ def test_pack_no_obsolete_packs_directory(self):
+ """Bug #314314, don't fail if obsolete_packs directory does
+ not exist."""
+ tree, r, packs, revs = self.make_packs_and_alt_repo(write_lock=True)
+ r.control_transport.rmdir('obsolete_packs')
+ packs._clear_obsolete_packs()
class TestPack(TestCaseWithTransport):
=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt 2011-12-12 13:05:24 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt 2011-12-12 13:44:20 +0000
@@ -41,6 +41,9 @@
* Allow configuration option default value to be a python callable at
registration. (Vincent Ladeuil, #832064)
+* Create obsolete_packs directory when repacking if it does not
+ exist. (Jonathan Riddell, Jelmer Vernooij, #314314)
+
* Properly ignore '\n' in an option reference since this cannot be part of a
config option identifier. (Vincent Ladeuil, #902125)
More information about the bazaar-commits
mailing list