# HG changeset patch # User Patrick Mezard # Date 1230933246 21600 # Node ID c4115b3918e90e51b6943ef54f00be3cc9da6c0b # Parent 2412800b12588582d082aecaf03bb7d582b7e598 Really delete the .hgsvnexternals file when explicitely removed diff --git a/fetch_command.py b/fetch_command.py --- a/fetch_command.py +++ b/fetch_command.py @@ -558,6 +558,8 @@ def stupid_svn_server_pull_rev(ui, svn, def filectxfn(repo, memctx, path): if path == '.hgsvnexternals': + if not externals: + raise IOError() return context.memfilectx(path=path, data=externals.write(), islink=False, isexec=False, copied=None) return filectxfn2(repo, memctx, path) diff --git a/hg_delta_editor.py b/hg_delta_editor.py --- a/hg_delta_editor.py +++ b/hg_delta_editor.py @@ -376,9 +376,12 @@ class HgChangeReceiver(delta.Editor): # Register the file changes for bp, external in branches.iteritems(): path = bp + '/.hgsvnexternals' - self.current_files[path] = external.write() - self.current_files_symlink[path] = False - self.current_files_exec[path] = False + if external: + self.current_files[path] = external.write() + self.current_files_symlink[path] = False + self.current_files_exec[path] = False + else: + self.delete_file(path) def commit_current_delta(self): if hasattr(self, '_exception_info'): #pragma: no cover diff --git a/tests/test_externals.py b/tests/test_externals.py --- a/tests/test_externals.py +++ b/tests/test_externals.py @@ -127,6 +127,14 @@ class TestPushExternals(test_util.TestBa self.assertTrue('subdir2/a' in self.repo['tip']) self.assertTrue('subdir1/a' not in self.repo['tip']) + # Test externals removal + changes = [ + ('.hgsvnexternals', None, None), + ] + self.commitchanges(changes) + self.pushrevisions(stupid) + self.assertchanges(changes, self.repo['tip']) + def test_push_externals_stupid(self): self.test_push_externals(True)