changeset 493:41c333473dda

try to deal with weirdly located branches in rebuildmeta (#118)
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Tue, 22 Sep 2009 16:46:16 +0200
parents 50d77547c218
children 6eea269ff134
files hgsubversion/svncommands.py tests/fixtures/siblingbranchfix.sh tests/fixtures/siblingbranchfix.svndump
diffstat 3 files changed, 183 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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)
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
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
+
+