# HG changeset patch # User Dirkjan Ochtman # Date 1253630776 -7200 # Node ID 41c333473ddaaddca7e8e192662972f536b0a98a # Parent 50d77547c218615f36d27c14ef1b6405a3e1d235 try to deal with weirdly located branches in rebuildmeta (#118) diff --git a/hgsubversion/svncommands.py b/hgsubversion/svncommands.py --- a/hgsubversion/svncommands.py +++ b/hgsubversion/svncommands.py @@ -1,4 +1,5 @@ import os +import posixpath import cPickle as pickle from mercurial import hg @@ -27,7 +28,6 @@ def verify(ui, repo, *args, **opts): srev = int(srev.split('@')[1]) ui.write('verifying %s against r%i\n' % (ctx, srev)) - url = repo.ui.expandpath('default') if args: url = args[0] @@ -35,6 +35,7 @@ def verify(ui, repo, *args, **opts): btypes = {'default': 'trunk'} branchpath = btypes.get(ctx.branch(), 'branches/%s' % ctx.branch()) + branchpath = posixpath.normpath(branchpath) svnfiles = set() result = 0 for fn, type in svn.list_files(branchpath, srev): @@ -141,8 +142,9 @@ def rebuildmeta(ui, repo, hg_repo_path, # find commitpath, write to revmap commitpath = revpath[len(subdir)+1:] - if commitpath.startswith('branches'): - commitpath = commitpath[len('branches/'):] + bp = posixpath.normpath('/'.join([subdir, 'branches', ctx.branch()])) + if revpath == bp: + commitpath = ctx.branch() elif commitpath == 'trunk': commitpath = '' elif commitpath.startswith('tags'): @@ -150,7 +152,7 @@ def rebuildmeta(ui, repo, hg_repo_path, continue commitpath = '../' + commitpath else: - assert False, 'Unhandled case in rebuildmeta' + assert False, 'unhandled rev %s: %s' % (rev, convinfo) revmap.write('%s %s %s\n' % (revision, ctx.hex(), commitpath)) revision = int(revision) diff --git a/tests/fixtures/siblingbranchfix.sh b/tests/fixtures/siblingbranchfix.sh new file mode 100755 --- /dev/null +++ b/tests/fixtures/siblingbranchfix.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +mkdir temp +cd temp +svnadmin create repo +svn co file://`pwd`/repo wc +cd wc +mkdir branches trunk tags +svn add * +svn ci -m 'btt' +cd trunk + +echo a > a +svn add a +svn ci -m 'Add file.' +svn up + +cd .. +svn cp trunk wrongbranch +svn ci -m 'Branch to repo root dir.' +svn up + +svn mv wrongbranch branches/wrongbranch +svn ci -m 'Move branch to correct branches location' +svn up + +cd ../.. +svnadmin dump temp/repo > siblingbranchfix.svndump +echo +echo 'Complete.' +echo 'You probably want to clean up temp now.' +echo 'Dump in siblingbranchfix.svndump' +exit 0 diff --git a/tests/fixtures/siblingbranchfix.svndump b/tests/fixtures/siblingbranchfix.svndump new file mode 100644 --- /dev/null +++ b/tests/fixtures/siblingbranchfix.svndump @@ -0,0 +1,144 @@ +SVN-fs-dump-format-version: 2 + +UUID: 380991ed-036e-45db-832e-7a8ca661c4f0 + +Revision-number: 0 +Prop-content-length: 56 +Content-length: 56 + +K 8 +svn:date +V 27 +2009-09-19T07:20:51.801386Z +PROPS-END + +Revision-number: 1 +Prop-content-length: 100 +Content-length: 100 + +K 7 +svn:log +V 3 +btt +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-09-19T07:20:52.057610Z +PROPS-END + +Node-path: branches +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: tags +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: trunk +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Revision-number: 2 +Prop-content-length: 106 +Content-length: 106 + +K 7 +svn:log +V 9 +Add file. +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-09-19T07:20:53.056417Z +PROPS-END + +Node-path: trunk/a +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3 +Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b +Content-length: 12 + +PROPS-END +a + + +Revision-number: 3 +Prop-content-length: 122 +Content-length: 122 + +K 7 +svn:log +V 24 +Branch to repo root dir. +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-09-19T07:20:56.043593Z +PROPS-END + +Node-path: wrongbranch +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: trunk + + +Revision-number: 4 +Prop-content-length: 138 +Content-length: 138 + +K 7 +svn:log +V 40 +Move branch to correct branches location +K 10 +svn:author +V 3 +djc +K 8 +svn:date +V 27 +2009-09-19T07:20:59.045512Z +PROPS-END + +Node-path: branches/wrongbranch +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 3 +Node-copyfrom-path: wrongbranch + + +Node-path: wrongbranch +Node-action: delete + +