Mercurial > hg
changeset 5379:d3e51dc804f8
mercurial_source: add --filemap support
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Thu, 04 Oct 2007 23:21:37 -0300 |
parents | 8a2915f57dfc |
children | a5a7f7fd5554 |
files | hgext/convert/hg.py tests/test-convert-filemap tests/test-convert-filemap.out |
diffstat | 3 files changed, 294 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/convert/hg.py Thu Oct 04 23:21:37 2007 -0300 +++ b/hgext/convert/hg.py Thu Oct 04 23:21:37 2007 -0300 @@ -177,6 +177,7 @@ raise NoRepo("could not open hg repo %s as source" % path) self.lastrev = None self.lastctx = None + self._changescache = None def changectx(self, rev): if self.lastrev != rev: @@ -202,7 +203,10 @@ def getchanges(self, rev): ctx = self.changectx(rev) - m, a, r = self.repo.status(ctx.parents()[0].node(), ctx.node())[:3] + if self._changescache and self._changescache[0] == rev: + m, a, r = self._changescache[1] + else: + m, a, r = self.repo.status(ctx.parents()[0].node(), ctx.node())[:3] changes = [(name, rev) for name in m + a + r] changes.sort() return (changes, self.getcopies(ctx, m + a)) @@ -226,3 +230,14 @@ def gettags(self): tags = [t for t in self.repo.tagslist() if t[0] != 'tip'] return dict([(name, hex(node)) for name, node in tags]) + + def getchangedfiles(self, rev, i): + ctx = self.changectx(rev) + i = i or 0 + changes = self.repo.status(ctx.parents()[i].node(), ctx.node())[:3] + + if i == 0: + self._changescache = (rev, changes) + + return changes[0] + changes[1] + changes[2] +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-filemap Thu Oct 04 23:21:37 2007 -0300 @@ -0,0 +1,124 @@ +#!/bin/sh + +HGMERGE=true; export HGMERGE + +echo '[extensions]' >> $HGRCPATH +echo 'hgext.graphlog =' >> $HGRCPATH +echo 'hgext.convert =' >> $HGRCPATH + +glog() +{ + hg glog --template '#rev# "#desc#" files: #files#\n' "$@" +} + +hg init source +cd source + +echo foo > foo +echo baz > baz +mkdir dir +echo dir/file >> dir/file +echo dir/file2 >> dir/file2 +hg ci -d '0 0' -qAm '0: add foo baz dir/' + +echo bar > bar +echo quux > quux +hg copy foo copied +hg ci -d '1 0' -qAm '1: add bar quux; copy foo to copied' + +echo >> foo +hg ci -d '2 0' -m '2: change foo' + +hg up -qC 1 +echo >> bar +echo >> quux +hg ci -d '3 0' -m '3: change bar quux' + +hg up -qC 2 +hg merge -qr 3 +echo >> bar +echo >> baz +hg ci -d '4 0' -m '4: first merge; change bar baz' + +echo >> bar +echo 1 >> baz +echo >> quux +hg ci -d '5 0' -m '5: change bar baz quux' + +hg up -qC 4 +echo >> foo +echo 2 >> baz +hg ci -d '6 0' -m '6: change foo baz' + +hg up -qC 5 +hg merge -qr 6 +echo >> bar +hg ci -d '7 0' -m '7: second merge; change bar' + +echo >> foo +hg ci -m '8: change foo' + +glog + +echo '% final file versions in this repo:' +hg manifest --debug +hg debugrename copied +echo + +cd .. + +splitrepo() +{ + msg="$1" + files="$2" + opts=$3 + echo "% $files: $msg" + prefix=`echo "$files" | sed -e 's/ /-/g'` + fmap="$prefix.fmap" + repo="$prefix.repo" + for i in $files; do + echo "include $i" >> "$fmap" + done + hg -q convert $opts --filemap "$fmap" --datesort source "$repo" + glog -R "$repo" + hg -R "$repo" manifest --debug +} + +splitrepo 'skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd' foo + +splitrepo 'merges are not merges anymore' bar + +splitrepo '1st merge is not a merge anymore; 2nd still is' baz + +splitrepo 'we add additional merges when they are interesting' 'foo quux' + +splitrepo 'partial conversion' 'bar quux' '-r 3' +splitrepo 'complete the partial conversion' 'bar quux' + +rm -r foo.repo +splitrepo 'partial conversion' 'foo' '-r 3' +splitrepo 'complete the partial conversion' 'foo' + +splitrepo 'copied file; source not included in new repo' copied +hg --cwd copied.repo debugrename copied + +splitrepo 'copied file; source included in new repo' 'foo copied' +hg --cwd foo-copied.repo debugrename copied + +cat > renames.fmap <<EOF +include dir +exclude dir/file2 +rename dir dir2 +include foo +include copied +rename foo foo2 +rename copied copied2 +EOF +hg -q convert --filemap renames.fmap --datesort source renames.repo +glog -R renames.repo +hg -R renames.repo manifest --debug +hg --cwd renames.repo debugrename copied2 +echo 'copied:' +hg --cwd source cat copied +echo 'copied2:' +hg --cwd renames.repo cat copied2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-filemap.out Thu Oct 04 23:21:37 2007 -0300 @@ -0,0 +1,154 @@ +@ 8 "8: change foo" files: foo +| +o 7 "7: second merge; change bar" files: bar baz +|\ +| o 6 "6: change foo baz" files: baz foo +| | +o | 5 "5: change bar baz quux" files: bar baz quux +|/ +o 4 "4: first merge; change bar baz" files: bar baz +|\ +| o 3 "3: change bar quux" files: bar quux +| | +o | 2 "2: change foo" files: foo +|/ +o 1 "1: add bar quux; copy foo to copied" files: bar copied quux +| +o 0 "0: add foo baz dir/" files: baz dir/file dir/file2 foo + +% final file versions in this repo: +9463f52fe115e377cf2878d4fc548117211063f2 644 bar +94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644 baz +6ca237634e1f6bee1b6db94292fb44f092a25842 644 copied +3e20847584beff41d7cd16136b7331ab3d754be0 644 dir/file +75e6d3f8328f5f6ace6bf10b98df793416a09dca 644 dir/file2 +9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo +bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644 quux +copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd + +% foo: skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd +o 3 "8: change foo" files: foo +| +o 2 "6: change foo baz" files: foo +| +o 1 "2: change foo" files: foo +| +o 0 "0: add foo baz dir/" files: foo + +9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo +% bar: merges are not merges anymore +o 4 "7: second merge; change bar" files: bar +| +o 3 "5: change bar baz quux" files: bar +| +o 2 "4: first merge; change bar baz" files: bar +| +o 1 "3: change bar quux" files: bar +| +o 0 "1: add bar quux; copy foo to copied" files: bar + +9463f52fe115e377cf2878d4fc548117211063f2 644 bar +% baz: 1st merge is not a merge anymore; 2nd still is +o 4 "7: second merge; change bar" files: baz +|\ +| o 3 "6: change foo baz" files: baz +| | +o | 2 "5: change bar baz quux" files: baz +|/ +o 1 "4: first merge; change bar baz" files: baz +| +o 0 "0: add foo baz dir/" files: baz + +94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644 baz +% foo quux: we add additional merges when they are interesting +o 8 "8: change foo" files: foo +| +o 7 "7: second merge; change bar" files: +|\ +| o 6 "6: change foo baz" files: foo +| | +o | 5 "5: change bar baz quux" files: quux +|/ +o 4 "4: first merge; change bar baz" files: +|\ +| o 3 "3: change bar quux" files: quux +| | +o | 2 "2: change foo" files: foo +|/ +o 1 "1: add bar quux; copy foo to copied" files: quux +| +o 0 "0: add foo baz dir/" files: foo + +9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo +bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644 quux +% bar quux: partial conversion +o 1 "3: change bar quux" files: bar quux +| +o 0 "1: add bar quux; copy foo to copied" files: bar quux + +b79105bedc55102f394e90a789c9c380117c1b4a 644 bar +db0421cc6b685a458c8d86c7d5c004f94429ea23 644 quux +% bar quux: complete the partial conversion +o 4 "7: second merge; change bar" files: bar +| +o 3 "5: change bar baz quux" files: bar quux +| +o 2 "4: first merge; change bar baz" files: bar +| +o 1 "3: change bar quux" files: bar quux +| +o 0 "1: add bar quux; copy foo to copied" files: bar quux + +9463f52fe115e377cf2878d4fc548117211063f2 644 bar +bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644 quux +% foo: partial conversion +o 0 "0: add foo baz dir/" files: foo + +2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 foo +% foo: complete the partial conversion +o 3 "8: change foo" files: foo +| +o 2 "6: change foo baz" files: foo +| +o 1 "2: change foo" files: foo +| +o 0 "0: add foo baz dir/" files: foo + +9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo +% copied: copied file; source not included in new repo +o 0 "1: add bar quux; copy foo to copied" files: copied + +2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 copied +copied not renamed +% foo copied: copied file; source included in new repo +o 4 "8: change foo" files: foo +| +o 3 "6: change foo baz" files: foo +| +o 2 "2: change foo" files: foo +| +o 1 "1: add bar quux; copy foo to copied" files: copied +| +o 0 "0: add foo baz dir/" files: foo + +6ca237634e1f6bee1b6db94292fb44f092a25842 644 copied +9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo +copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd +o 4 "8: change foo" files: foo2 +| +o 3 "6: change foo baz" files: foo2 +| +o 2 "2: change foo" files: foo2 +| +o 1 "1: add bar quux; copy foo to copied" files: copied2 +| +o 0 "0: add foo baz dir/" files: dir2/file foo2 + +e5e3d520be9be45937d0b06b004fadcd6c221fa2 644 copied2 +3e20847584beff41d7cd16136b7331ab3d754be0 644 dir2/file +9a7b52012991e4873687192c3e17e61ba3e837a3 644 foo2 +copied2 renamed from foo2:2ed2a3912a0b24502043eae84ee4b279c18b90dd +copied: +foo +copied2: +foo