# HG changeset patch # User Patrick Mezard # Date 1240492025 -7200 # Node ID 13b36eb143249b1430e80e0fcfff0f1d46a77106 # Parent da9f3866c637475fe697a9d949b5597886714d72 convert/bzr: handle files replaced by directories (issue1623) diff -r da9f3866c637 -r 13b36eb14324 hgext/convert/bzr.py --- a/hgext/convert/bzr.py Thu Apr 23 08:45:44 2009 +0200 +++ b/hgext/convert/bzr.py Thu Apr 23 15:07:05 2009 +0200 @@ -148,6 +148,11 @@ # bazaar tracks directories, mercurial does not, so # we have to rename the directory contents if kind[1] == 'directory': + if kind[0] not in (None, 'directory'): + # Replacing 'something' with a directory, record it + # so it can be removed. + changes.append((self.recode(paths[0]), revid)) + if None not in paths and paths[0] != paths[1]: # neither an add nor an delete - a move # rename all directory contents manually diff -r da9f3866c637 -r 13b36eb14324 tests/hghave --- a/tests/hghave Thu Apr 23 08:45:44 2009 +0200 +++ b/tests/hghave Thu Apr 23 15:07:05 2009 +0200 @@ -31,6 +31,14 @@ except ImportError: return False +def has_bzr114(): + try: + import bzrlib + return (bzrlib.__doc__ != None + and bzrlib.version_info[:2] == (1, 14)) + except ImportError: + return False + def has_cvs(): re = r'Concurrent Versions System.*?server' return matchoutput('cvs --version 2>&1', re) @@ -163,6 +171,7 @@ checks = { "baz": (has_baz, "GNU Arch baz client"), "bzr": (has_bzr, "Canonical's Bazaar client"), + "bzr114": (has_bzr114, "Canonical's Bazaar client >= 1.14"), "cvs": (has_cvs, "cvs client/server"), "cvsps": (has_cvsps, "cvsps utility"), "darcs": (has_darcs, "darcs client"), diff -r da9f3866c637 -r 13b36eb14324 tests/test-convert-bzr-114 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-bzr-114 Thu Apr 23 15:07:05 2009 +0200 @@ -0,0 +1,30 @@ +#!/bin/sh + +"$TESTDIR/hghave" bzr114 || exit 80 + +. "$TESTDIR/bzr-definitions" + +# The file/directory replacement can only be reproduced on +# bzr >= 1.4. Merge it back in test-convert-bzr-directories once +# this version becomes mainstream. +echo % replace file with dir +mkdir test-replace-file-with-dir +cd test-replace-file-with-dir +bzr init -q source +cd source +echo d > d +bzr add -q d +bzr commit -q -m 'add d file' +rm d +mkdir d +bzr add -q d +bzr commit -q -m 'replace with d dir' +echo a > d/a +bzr add -q d/a +bzr commit -q -m 'add d/a' +cd .. +hg convert source source-hg +manifest source-hg tip +cd source-hg +hg update +cd ../.. diff -r da9f3866c637 -r 13b36eb14324 tests/test-convert-bzr-114.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-bzr-114.out Thu Apr 23 15:07:05 2009 +0200 @@ -0,0 +1,11 @@ +% replace file with dir +initializing destination source-hg repository +scanning source... +sorting... +converting... +2 add d file +1 replace with d dir +0 add d/a +% manifest of tip +644 d/a +1 files updated, 0 files merged, 0 files removed, 0 files unresolved