mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 01:07:15 +03:00
b2242b3313
Handle copies of items from revision X into revision Y where X is not the parent of Y. This cannot happen in Mercurial because copies always happen between parents and children. A file copy is recorded if: 1- Source and destination revs are in the same branch. 2- The file is unchanged (content, type, removal) through all revisions between destination and source, not including source and destination. Directory copies are registered only if the previous rules apply on all copied items. [1] is there because file copies across branches are meaningless in Mercurial world. We could have tried to remap the source rev to a similar one in the correct branch, but anyway the intent is wrong. [2] is more questionable but I think it's better this way for we live in a non-perfect svn world. In theory, 99% of copies out there should come from the direct parent. But the direct parent is a fuzzy notion when you can have a working directory composed of different directory at different revisions. So we assume that stuff copied from past revisions exactly matching the content of the direct parent revision is really copied from the parent revision. The alternative would be to discard the copy, which would always happen unless people kept updating the working directory after every commit (see tests).
93 lines
2.2 KiB
Bash
Executable File
93 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Generate renames.svndump
|
|
#
|
|
|
|
mkdir temp
|
|
cd temp
|
|
|
|
mkdir project-orig
|
|
cd project-orig
|
|
mkdir trunk
|
|
mkdir branches
|
|
cd ..
|
|
|
|
svnadmin create testrepo
|
|
svnurl=file://`pwd`/testrepo
|
|
svn import project-orig $svnurl -m "init project"
|
|
|
|
svn co $svnurl project
|
|
cd project/trunk
|
|
# Entries for regular tests
|
|
echo a > a
|
|
echo b > b
|
|
mkdir -p da/db
|
|
echo c > da/daf
|
|
echo d > da/db/dbf
|
|
# Entries to test delete + copy
|
|
echo deleted > deletedfile
|
|
mkdir deleteddir
|
|
echo deleteddir > deleteddir/f
|
|
# Entries to test copy before change
|
|
echo changed > changed
|
|
mkdir changeddir
|
|
echo changed2 > changeddir/f
|
|
# Entries unchanged in the rest of history
|
|
echo unchanged > unchanged
|
|
mkdir unchangeddir
|
|
echo unchanged2 > unchangeddir/f
|
|
svn add a b da deletedfile deleteddir changed changeddir unchanged unchangeddir
|
|
svn ci -m "add a and b"
|
|
# Remove files to be copied later
|
|
svn rm deletedfile
|
|
svn rm deleteddir
|
|
# Update files to be copied before this change
|
|
echo changed >> changed
|
|
echo changed2 >> changeddir/f
|
|
svn ci -m "delete files and dirs"
|
|
cd ../branches
|
|
svn cp ../trunk branch1
|
|
svn ci -m "create branch1"
|
|
cd branch1
|
|
echo c > c
|
|
svn add c
|
|
svn ci -m "add c"
|
|
cd ../../trunk
|
|
# Regular copy and rename
|
|
svn cp a a1
|
|
svn mv a a2
|
|
# Copy and update of source and dest
|
|
svn cp b b1
|
|
echo b >> b
|
|
echo c >> b1
|
|
# Directory copy and renaming
|
|
svn cp da da1
|
|
svn mv da da2
|
|
# Test one copy operation in branch
|
|
cd ../branches/branch1
|
|
svn cp c c1
|
|
echo c >> c1
|
|
cd ../..
|
|
svn ci -m "rename and copy a, b and da"
|
|
cd trunk
|
|
# Copy across branch
|
|
svn cp ../branches/branch1/c c
|
|
svn ci -m "copy b from branch1"
|
|
# Copy deleted stuff from the past
|
|
svn cp $svnurl/trunk/deletedfile@2 deletedfile
|
|
svn cp $svnurl/trunk/deleteddir@2 deleteddir
|
|
svn ci -m "copy stuff from the past"
|
|
# Copy data from the past before it was changed
|
|
svn cp $svnurl/trunk/changed@2 changed2
|
|
svn cp $svnurl/trunk/changeddir@2 changeddir2
|
|
svn ci -m "copy stuff from the past before change"
|
|
# Copy unchanged stuff from the past. Since no changed occured in these files
|
|
# between the source and parent revision, we record them as copy from parent
|
|
# instead of source rev.
|
|
svn cp $svnurl/trunk/unchanged@2 unchanged2
|
|
svn cp $svnurl/trunk/unchangeddir@2 unchangeddir2
|
|
svn ci -m "copy unchanged stuff from the past"
|
|
cd ../..
|
|
|
|
svnadmin dump testrepo > ../renames.svndump
|