[PATCH] fix monotone import with renamed directories

Pavel Volkovitskiy olfway at gmail.com
Thu Apr 2 13:28:01 CDT 2009


http://www.selenic.com/mercurial/bts/issue1587

# HG changeset patch
# User Pavel Volkovitskiy <int at mtx.ru>
# Date 1238696749 -14400
# Node ID a1606ae33e8ea392908e8b1e04ea5e289543cb9c
# Parent  4b76746a988b9279b4ce4deb4f25ed9a59ae74d0
right way to check if file was in renamed directory, fixes import monotone
repos with renamed directories

diff -r 4b76746a988b -r a1606ae33e8e hgext/convert/monotone.py
--- a/hgext/convert/monotone.py Mon Mar 23 15:04:26 2009 -0400
+++ b/hgext/convert/monotone.py Thu Apr 02 22:25:49 2009 +0400
@@ -111,9 +111,8 @@
     def mtnrenamefiles(self, files, fromdir, todir):
         renamed = {}
         for tofile in files:
-            suffix = tofile.lstrip(todir)
-            if todir + suffix == tofile:
-                renamed[tofile] = (fromdir + suffix).lstrip("/")
+            if tofile.startswith(todir):
+                renamed[tofile] = fromdir + tofile[len(todir):]
         return renamed


diff -r 4b76746a988b -r a1606ae33e8e tests/test-convert-mtn-rename-directory
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-mtn-rename-directory   Thu Apr 02 22:25:49 2009
+0400
@@ -0,0 +1,53
@@
+#!/bin/sh

+

+"$TESTDIR/hghave" mtn || exit
80
+

+# Monotone directory is called .monotone on *nix and
monotone
+# on Windows. Having a variable here ease test
patching.
+mtndir=.monotone

+echo "[extensions]" >>
$HGRCPATH
+echo "convert=" >>
$HGRCPATH
+echo 'hgext.graphlog =' >>
$HGRCPATH
+

+HOME=`pwd`/do_not_use_HOME_mtn; export
HOME
+# Windows version of monotone
home
+APPDATA=$HOME; export
APPDATA
+

+echo % tedious monotone keys
configuration
+# The /dev/null redirection is necessary under Windows,
or
+# it complains about home directory
permissions
+mtn --quiet genkey test at selenic.com 1>/dev/null 2>&1
<<EOF
+passphrase

+passphrase

+EOF

+cat >> $HOME/$mtndir/monotonerc
<<EOF
+function
get_passphrase(keypair_id)
+    return
"passphrase"
+end

+EOF

+

+echo % create monotone
repository
+mtn db init
--db=repo.mtn
+mtn --db=repo.mtn --branch=com.selenic.test setup
workingdir
+cd
workingdir
+mkdir -p
dir1/subdir1
+echo file1 >
dir1/subdir1/file1
+mtn add
dir1/subdir1/file1
+

+mtn ci -m
initialize
+echo % rename
directory
+mtn rename dir1/subdir1
dir1/subdir2
+mtn ci -m
rename
+cd
..
+
+echo % convert
+hg convert -s mtn repo.mtn
+
+cd repo.mtn-hg
+hg up -C
+echo % manifest
+hg manifest
+test -d dir1/subdir2 || echo 'new dir1/subdir2 does not exist!'
+test -d dir1/subdir1 && echo 'renamed dir1/subdir1 is still there!'
+exit 0
+
diff -r 4b76746a988b -r a1606ae33e8e
tests/test-convert-mtn-rename-directory.out
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-mtn-rename-directory.out       Thu Apr 02 22:25:49
2009 +0400
@@ -0,0 +1,23 @@
+% tedious monotone keys configuration
+% create monotone repository
+mtn: adding dir1 to workspace manifest
+mtn: adding dir1/subdir1 to workspace manifest
+mtn: adding dir1/subdir1/file1 to workspace manifest
+mtn: beginning commit on branch 'com.selenic.test'
+mtn: committed revision 5ed13ff5582d8d1e319f079b694a37d2b45edfc8
+% rename directory
+mtn: skipping dir1, already accounted for in workspace
+mtn: renaming dir1/subdir1 to dir1/subdir2 in workspace manifest
+mtn: beginning commit on branch 'com.selenic.test'
+mtn: committed revision 985204142a822b22ee86b509d61f3c5ab6857d2b
+% convert
+assuming destination repo.mtn-hg
+initializing destination repo.mtn-hg repository
+scanning source...
+sorting...
+converting...
+1 initialize
+0 rename
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% manifest
+dir1/subdir2/file1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://selenic.com/pipermail/mercurial-devel/attachments/20090402/6ade1016/attachment.htm 


More information about the Mercurial-devel mailing list