Revert almost all of 5be434785317; add a test
Because of file copies, we should update the manifest dict only after
committing all files.
% new file
applying patch from stdin
% new empty file
applying patch from stdin
empty
% chmod +x
applying patch from stdin
% copy
applying patch from stdin
a
a
% rename
applying patch from stdin
copyx
empty
new
rename
% delete
applying patch from stdin
empty
new
rename
% regular diff
applying patch from stdin
% copy and modify
applying patch from stdin
a
a
b
a
a
% rename and modify
applying patch from stdin
copy2: No such file or directory
a
a
b
c
a