Comment 0 for bug 177809

Revision history for this message
Spencer E. Chastain (sechastain) wrote : bzr mv should handle failure better

The Problem
~~~~~~~~~

I was using bzr 1.0 on windows.

I had a branch similar as follows:

branch-dir
- child-dir
- foo.h
- foo.cpp
- bar.h
- bar.cpp
- baz.h
- baz.cpp

So running the following produced:
$ bzr mv foo.h foo.cpp bar.h bar.h baz.h baz.cpp child-dir
bzr: ERROR: Could not move bar.h => child-dir: bar.h is not versioned.

My first guess was that nothing happened and that I needed to modify my command, but when I edited and ran the following:
$ bzr mv foo.h foo.cpp bar.h bar.cpp baz.h baz.cpp child-dir
bzr: ERROR: Could not move foo.h => child-dir: foo.h is not versioned.

So then I ran bzr status to see what was going on:
$ bzr status
renamed:
  bar.h => child-dir/bar.h
  foo.cpp => child-dir/foo.cpp
  foo.h => child-dir/foo.h

so, then I realized what happened - it processed the move of my files up to a point, then quit.

Cognitive Dissonance
~~~~~~~~~~~~~~~~

Due to insufficient reporting, I assumed the command as a whole had failed. However, it makes sense from an implementation perspective that it would work until it couldn't.

From my perspective, I expected bzr mv would inform me that it had done /something/ successfully while other things unsuccessfully.

Since some of my move request was processed, I would expect that it would continue trying to process the rest of my command even if it encountered some errors. Plus, since my "error" was actually a duplicate file name, I wouldn't expect to see an error at all.

What I Expected
~~~~~~~~~~~~

So, if I would have ran the following command with my original branch above, I would expect to see:
$ bzr mv foo.h foo.cpp bar.h bar.h baz.h baz.cpp makebelieve.txt child-dir
renamed:
  bar.h => child-dir/bar.h
  baz.cpp => child-dir/baz.cpp
  baz.h => child-dir/baz.h
  foo.cpp => child-dir/foo.cpp
  foo.h => child-dir/foo.h
failed to rename (does not exist):
  makebelieve.txt
duplicate argument:
  foo.h