blob: b8ee76ca5e900093b62a123b38d029fd6f760e65 [file] [log] [blame]
Directory copies -- How They Work
What happens now, when you type "svn cp dir1 dir2":
* dir1 is copied recursively via APR IO routines (equivalent to a
unix 'cp -R dir1 dir2')
* dir2 is scheduled for addition in both parent and its own
'this_dir' entry, ** with copyfrom args **.
* dir2's ancestor URL is rewritten, as is the ancestor URL of
*every* child. (recursively). We do this because it's the normal
expected behavior; whenever we schedule anything for addition, the
new entry receives a "predicted" URL that doesn't really exist
yet.
* during commit, the commit-crawler correctly sends copyfrom args to
editor, and svn_fs_copy is called, and then crawler recurses *not*
in funky 'adds-only' mode (so it can still detect local mods)
* after commit succeeds, any directory "target" that was added with
history has ALL of its children recursively revision-bumped.
What still needs to happen:
* crawler: if existence==copied, report differing revisions!
(compare entry->rev against parent_stackframe->entry->rev.)
* post-commit: how to deal with deletes within a copied directory?
svn_wc_set_revision is told to do a recursive bump.
it calls log_do_committed, which is supposed to recognize a
"schedule delete", no? and remove it from version control?