comparison tests/test_push_command.py @ 356:62f90781eb10

push: don't refuse to push if it looks like we haven't pulled all changes. We can't rely on the most-recent change number matching our most-recent change number because there can be changes in svn that produce no corresponding hg changeset.
author Augie Fackler <durin42@gmail.com>
date Wed, 27 May 2009 21:40:58 -0500
parents 5d0d9424913f
children db3a53a2cd76 37718f514acb
comparison
equal deleted inserted replaced
355:256863a65141 356:62f90781eb10
1 import atexit 1 import atexit
2 import os 2 import os
3 import random 3 import random
4 import shutil
4 import socket 5 import socket
5 import subprocess 6 import subprocess
6 import unittest 7 import unittest
7 8
8 from mercurial import context 9 from mercurial import context
210 assert False, "this is impossible, adding_file2 should not be in this manifest." 211 assert False, "this is impossible, adding_file2 should not be in this manifest."
211 except revlog.LookupError, e: 212 except revlog.LookupError, e:
212 pass 213 pass
213 self.assertEqual(tip.branch(), 'default') 214 self.assertEqual(tip.branch(), 'default')
214 215
215 def test_push_to_branch(self): 216 def test_push_to_branch(self, push=True):
216 repo = self.repo 217 repo = self.repo
217 def file_callback(repo, memctx, path): 218 def file_callback(repo, memctx, path):
218 if path == 'adding_file': 219 if path == 'adding_file':
219 return context.memfilectx(path=path, 220 return context.memfilectx(path=path,
220 data='foo', 221 data='foo',
229 file_callback, 230 file_callback,
230 'an_author', 231 'an_author',
231 '2008-10-07 20:59:48 -0500', 232 '2008-10-07 20:59:48 -0500',
232 {'branch': 'the_branch',}) 233 {'branch': 'the_branch',})
233 new_hash = repo.commitctx(ctx) 234 new_hash = repo.commitctx(ctx)
234 #commands.update(ui.ui(), self.repo, node='tip') 235 hg.update(repo, repo['tip'].node())
235 hg.update(repo, repo['tip'].node()) 236 if push:
236 self.pushrevisions() 237 self.pushrevisions()
237 tip = self.repo['tip'] 238 tip = self.repo['tip']
238 self.assertNotEqual(tip.node(), new_hash) 239 self.assertNotEqual(tip.node(), new_hash)
239 self.assertEqual(tip['adding_file'].data(), 'foo') 240 self.assertEqual(tip['adding_file'].data(), 'foo')
240 self.assertEqual(tip.branch(), 'the_branch') 241 self.assertEqual(tip.branch(), 'the_branch')
242
243 def push_to_non_tip(self):
244 self.test_push_to_branch(push=False)
245 wc2path = self.wc_path + '_clone'
246 u = self.repo.ui
247 hg.clone(self.repo.ui, self.wc_path, wc2path, update=False)
248 self.pushrevisions()
249 oldf = open(os.path.join(self.wc_path, '.hg', 'hgrc'))
250 hgrc = oldf.read()
251 oldf.close()
252 shutil.rmtree(self.wc_path)
253 hg.clone(u, wc2path, self.wc_path, update=False)
254 oldf = open(os.path.join(self.wc_path, '.hg', 'hgrc'), 'w')
255 oldf.write(hgrc)
256 oldf.close()
257
258 # do a commit here
259 self.commitchanges([('foobaz', 'foobaz', 'This file is added on default.', ),
260 ],
261 parent='default',
262 message='commit to default')
263 from hgsubversion import svncommands
264 svncommands.rebuildmeta(u,
265 self.repo,
266 os.path.dirname(self.repo.path),
267 args=[test_util.fileurl(self.repo_path)])
268
269
270 hg.update(self.repo, self.repo['tip'].node())
271 oldnode = self.repo['tip'].hex()
272 self.pushrevisions(expected_extra_back=1)
273 self.assertNotEqual(oldnode, self.repo['tip'].hex(), 'Revision was not pushed.')
241 274
242 def test_delete_file(self): 275 def test_delete_file(self):
243 repo = self.repo 276 repo = self.repo
244 def file_callback(repo, memctx, path): 277 def file_callback(repo, memctx, path):
245 raise IOError() 278 raise IOError()