Merge lp:~parthm/bzr/335033_and_300001 into lp:bzr

Proposed by Parth Malwankar
Status: Merged
Approved by: Martin Pool
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~parthm/bzr/335033_and_300001
Merge into: lp:bzr
Diff against target: 205 lines (+74/-29)
4 files modified
NEWS (+5/-0)
bzrlib/bzrdir.py (+11/-2)
bzrlib/tests/blackbox/test_upgrade.py (+36/-6)
bzrlib/tests/test_upgrade.py (+22/-21)
To merge this branch: bzr merge lp:~parthm/bzr/335033_and_300001
Reviewer Review Type Date Requested Status
Martin Pool Approve
Review via email: mp+19326@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Parth Malwankar (parthm) wrote :

This merge fixes #335033 and #300001

'bzr upgrade' now names the backup directory as 'backup.bzr.~N~' following the same convention as 'bzr revert'. This name (*~) is ignored by default. The first available integer (starting from 1) is used for N.

Revision history for this message
Martin Pool (mbp) wrote :

thanks

review: Approve
Revision history for this message
Martin Pool (mbp) wrote :

This fails in test_info:

Traceback (most recent call last):
  File "/home/mbp/lib/python/testtools/runtest.py", line 128, in _run_user
    return fn(*args)
  File "/home/mbp/lib/python/testtools/testcase.py", line 369, in _run_test_method
    testMethod()
  File "/home/mbp/bzr/335033-upgrade/bzrlib/tests/blackbox/test_info.py", line 231, in test_info_standalone
    ), out)
AssertionError: texts not equal:
  Checkout (format: knit)
  Location:
         checkout root: bound
    checkout of branch: standalone

  Related branches:
    parent branch: standalone

  Format:
         control: Meta directory format 1
    working tree: Working tree format 3
          branch: Branch format 5
      repository: Knit repository format 1

  In the working tree:
           1 unchanged
           0 modified
           0 added
           0 removed
           0 renamed
- 1 unknown
? ^
+ 0 unknown
? ^
- 0 ignored
? ^
+ 1 ignored
? ^
           0 versioned subdirectories

  Branch history:
           1 revision
           0 days old
     first revision: Thu 2010-02-18 13:29:12 +1100
    latest revision: Thu 2010-02-18 13:29:12 +1100

  Repository:
           1 revision

Revision history for this message
Parth Malwankar (parthm) wrote :

Sorry about that.
I just pushed the fix.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'NEWS'
2--- NEWS 2010-02-12 15:15:24 +0000
3+++ NEWS 2010-02-15 11:40:31 +0000
4@@ -70,6 +70,11 @@
5 prevents ``bzr status --short`` from crashing when those files are
6 present. (John Arbash Meinel, #303275)
7
8+* ``bzr upgrade`` now names backup directory as ``backup.bzr.~N~`` instead
9+ of ``backup.bzr``. This directory is ignored by bzr commands such as
10+ ``add``.
11+ (Parth Malwankar, #335033, #300001)
12+
13 API Changes
14 ***********
15
16
17=== modified file 'bzrlib/bzrdir.py'
18--- bzrlib/bzrdir.py 2010-02-10 17:52:08 +0000
19+++ bzrlib/bzrdir.py 2010-02-15 11:40:31 +0000
20@@ -575,6 +575,15 @@
21
22 :return: Tuple with old path name and new path name
23 """
24+ def name_gen(base='backup.bzr'):
25+ counter = 1
26+ name = "%s.~%d~" % (base, counter)
27+ while self.root_transport.has(name):
28+ counter += 1
29+ name = "%s.~%d~" % (base, counter)
30+ return name
31+
32+ backup_dir=name_gen()
33 pb = ui.ui_factory.nested_progress_bar()
34 try:
35 # FIXME: bug 300001 -- the backup fails if the backup directory
36@@ -584,9 +593,9 @@
37 # FIXME: bug 262450 -- the backup directory should have the same
38 # permissions as the .bzr directory (probably a bug in copy_tree)
39 old_path = self.root_transport.abspath('.bzr')
40- new_path = self.root_transport.abspath('backup.bzr')
41+ new_path = self.root_transport.abspath(backup_dir)
42 ui.ui_factory.note('making backup of %s\n to %s' % (old_path, new_path,))
43- self.root_transport.copy_tree('.bzr', 'backup.bzr')
44+ self.root_transport.copy_tree('.bzr', backup_dir)
45 return (old_path, new_path)
46 finally:
47 pb.finished()
48
49=== modified file 'bzrlib/tests/blackbox/test_upgrade.py'
50--- bzrlib/tests/blackbox/test_upgrade.py 2010-01-25 17:48:22 +0000
51+++ bzrlib/tests/blackbox/test_upgrade.py 2010-02-15 11:40:31 +0000
52@@ -101,17 +101,18 @@
53 url = get_transport(self.get_url('format_5_branch')).base
54 # check --format takes effect
55 bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
56+ backup_dir = 'backup.bzr.~1~'
57 (out, err) = self.run_bzr(
58 ['upgrade', '--format=metaweave', url])
59 self.assertEqualDiff("""starting upgrade of %s
60 making backup of %s.bzr
61- to %sbackup.bzr
62+ to %s%s
63 starting upgrade from format 5 to 6
64 adding prefixes to weaves
65 adding prefixes to revision-store
66 starting upgrade from format 6 to metadir
67 finished
68-""" % (url, url, url), out)
69+""" % (url, url, url, backup_dir), out)
70 self.assertEqualDiff("", err)
71 self.assertTrue(isinstance(
72 bzrdir.BzrDir.open(self.get_url('format_5_branch'))._format,
73@@ -124,15 +125,16 @@
74 url = get_transport(self.get_url('metadir_weave_branch')).base
75 # check --format takes effect
76 bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
77+ backup_dir = 'backup.bzr.~1~'
78 (out, err) = self.run_bzr(
79 ['upgrade', '--format=knit', url])
80 self.assertEqualDiff("""starting upgrade of %s
81 making backup of %s.bzr
82- to %sbackup.bzr
83+ to %s%s
84 starting repository conversion
85 repository converted
86 finished
87-""" % (url, url, url), out)
88+""" % (url, url, url, backup_dir), out)
89 self.assertEqualDiff("", err)
90 converted_dir = bzrdir.BzrDir.open(self.get_url('metadir_weave_branch'))
91 self.assertTrue(isinstance(converted_dir._format,
92@@ -145,6 +147,33 @@
93 self.run_bzr('upgrade --format=knit repo')
94
95
96+ def test_upgrade_with_existing_backup_dir(self):
97+ self.make_format_5_branch()
98+ transport = get_transport(self.get_url('format_5_branch'))
99+ url = transport.base
100+ bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
101+ backup_dir1 = 'backup.bzr.~1~'
102+ backup_dir2 = 'backup.bzr.~2~'
103+ # explicitly create backup_dir1. bzr should create the .~2~ directory
104+ # as backup
105+ transport.mkdir(backup_dir1)
106+ (out, err) = self.run_bzr(
107+ ['upgrade', '--format=metaweave', url])
108+ self.assertEqualDiff("""starting upgrade of %s
109+making backup of %s.bzr
110+ to %s%s
111+starting upgrade from format 5 to 6
112+adding prefixes to weaves
113+adding prefixes to revision-store
114+starting upgrade from format 6 to metadir
115+finished
116+""" % (url, url, url, backup_dir2), out)
117+ self.assertEqualDiff("", err)
118+ self.assertTrue(isinstance(
119+ bzrdir.BzrDir.open(self.get_url('format_5_branch'))._format,
120+ bzrdir.BzrDirMetaFormat1))
121+ self.assertTrue(transport.has(backup_dir2))
122+
123 class SFTPTests(TestCaseWithSFTPServer):
124 """Tests for upgrade over sftp."""
125
126@@ -153,14 +182,15 @@
127 t = get_transport(self.get_url())
128 url = t.base
129 out, err = self.run_bzr(['upgrade', '--format=knit', url])
130+ backup_dir = 'backup.bzr.~1~'
131 self.assertEqualDiff("""starting upgrade of %s
132 making backup of %s.bzr
133- to %sbackup.bzr
134+ to %s%s
135 starting upgrade from format 6 to metadir
136 starting repository conversion
137 repository converted
138 finished
139-""" % (url, url, url), out)
140+""" % (url, url, url,backup_dir), out)
141 self.assertEqual('', err)
142
143
144
145=== modified file 'bzrlib/tests/test_upgrade.py'
146--- bzrlib/tests/test_upgrade.py 2010-02-10 17:52:08 +0000
147+++ bzrlib/tests/test_upgrade.py 2010-02-15 11:40:31 +0000
148@@ -79,27 +79,28 @@
149 finally:
150 rt.unlock()
151 # check a backup was made:
152+ backup_dir = 'backup.bzr.~1~'
153 transport = get_transport(b.base)
154- transport.stat('backup.bzr')
155- transport.stat('backup.bzr/README')
156- transport.stat('backup.bzr/branch-format')
157- transport.stat('backup.bzr/revision-history')
158- transport.stat('backup.bzr/merged-patches')
159- transport.stat('backup.bzr/pending-merged-patches')
160- transport.stat('backup.bzr/pending-merges')
161- transport.stat('backup.bzr/branch-name')
162- transport.stat('backup.bzr/branch-lock')
163- transport.stat('backup.bzr/inventory')
164- transport.stat('backup.bzr/stat-cache')
165- transport.stat('backup.bzr/text-store')
166- transport.stat('backup.bzr/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
167- transport.stat('backup.bzr/text-store/foo-20051004035756-4081373d897c3453.gz')
168- transport.stat('backup.bzr/inventory-store/')
169- transport.stat('backup.bzr/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
170- transport.stat('backup.bzr/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
171- transport.stat('backup.bzr/revision-store/')
172- transport.stat('backup.bzr/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
173- transport.stat('backup.bzr/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
174+ transport.stat(backup_dir)
175+ transport.stat(backup_dir + '/README')
176+ transport.stat(backup_dir + '/branch-format')
177+ transport.stat(backup_dir + '/revision-history')
178+ transport.stat(backup_dir + '/merged-patches')
179+ transport.stat(backup_dir + '/pending-merged-patches')
180+ transport.stat(backup_dir + '/pending-merges')
181+ transport.stat(backup_dir + '/branch-name')
182+ transport.stat(backup_dir + '/branch-lock')
183+ transport.stat(backup_dir + '/inventory')
184+ transport.stat(backup_dir + '/stat-cache')
185+ transport.stat(backup_dir + '/text-store')
186+ transport.stat(backup_dir + '/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
187+ transport.stat(backup_dir + '/text-store/foo-20051004035756-4081373d897c3453.gz')
188+ transport.stat(backup_dir + '/inventory-store/')
189+ transport.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
190+ transport.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
191+ transport.stat(backup_dir + '/revision-store/')
192+ transport.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
193+ transport.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
194
195 def test_upgrade_with_ghosts(self):
196 """Upgrade v0.0.4 tree containing ghost references.
197@@ -157,7 +158,7 @@
198 self.assertFalse(transport.has('.bzr/stat-cache'))
199 # XXX: upgrade fails if a backup.bzr is already present
200 # -- David Allouche 2006-08-11
201- transport.delete_tree('backup.bzr')
202+ transport.delete_tree('backup.bzr.~1~')
203 # At this point, we have a format6 branch without checkout files.
204 upgrade('.', bzrdir.BzrDirMetaFormat1())
205 # The upgrade should not have set up a working tree.