* A file and a directory could in theory also be synchronized, under
  the assumption that what the user meant was a file of the same name
  in that directory.

* User actions in interactive mode to add exclusions to the profile
  (extensions, file names, file patterns...)

* Make the read time-out configurable: --time-out=<seconds>

* Options to run a specific command as server:
  --server-cmd1=<command>, --server-cmd2=<command>,
  --server-cmd=<command>.

* Option to specify the SSH command (or an alternative program) to
  connect to a remote machine: --rsh-cmd1=<command>,
  --rsh-cmd2=<command>, --rsh-cmd=<command>

* Collect statistics also about time: total time, bytes per second,
  seconds per file...

* Better error messages for files that cannot be read or written.

* Implement command 'd' (show differences): Sync to a temporary file
  and then run "diff"?

* If there is a problem with a store, inform the user of the store
  name.

* Options for predefined file name exceptions: CVS files, backup files
  (*~), etc.

* Also synchronize owner/group?

* Localize the keys "y" and "n" (for yes/no).

* Recognize moved/renamed files? Let server know about files about to
  be deleted *before* any "update" commands? (On the other hand, it
  means computing more checksums.)

* When comparing a case-sensitive file system with a case-insensitive
  one, there may be multiple matching files and the wrong one may be
  compared. Detect such conflicts.

* When comparing a case-sensitive file system with a case-insensitive
  one, should the case-sensitive one simulate being case-insensitive?
  That is difficult. Or can we rename files on the case-insensitive
  target to match the case of the files on the other target?

* When r2sync is interrupted, the temporary file it is writing is
  removed, but not the directories created for it.

* The statistics (-s) should not count excluded files.

* Remove/create empty directories?

* Verify that a file didn't change between when we listed it and when
  we try to use it as a source for a delta.

* What happens if a file turned into a symlink or vice-versa?

* Go back ('p' command) even from the "Synchronize the files? (y/n)"
  prompt.

* Use metadata from other .store files to avoid computing checksums?

* When a target directory doesn't exist, offer to create it?

* Collect statistics about the performance of the hash tables.

* Should servers know about and skip excluded file patterns?
  Currently, all files are sent and the client filters them.

* Is there a better (faster) way to check if a file system is
  case-sensitive than to create and open a file? Mac OS has a
  getattrlist() function to find out if a file system is
  case-sensitive, but that call doesn't exist on Linux, and it's hard
  to use.

* Our check in fact only checks if the filesystem that has the /tmp
  directory is case-sensitive. What if it is different from the target
  directory? Or if the target directory has subdirectories on
  different file systems?

* Add a "report" command to let the server pass back some statistics?

* Protect against corruption of the log in case the program is
  interrupted. Write to a temporary file and rename? Append entries to
  the file immediately ("write-through") in store_put()?

* Write a test for autoconf to check whether the permission bits on
  symbolic links are 0777 (Linux) or 0755 (Mac OS) so that the call to
  lstat() in make_symlink() isn't needed.

* Do we need an option to update a file in-place rather than by
  renaming? Or to copy the temporary file into the old file rather
  than renaming it? That way it keeps its inode number.

* Check syntax of returned delta (i.e., there is nothing on the line
  other than a checksum and a digest).

* An option to exclude executable files.

* An option to prompt only for an action when there is no default
  action (i.e., when the default action is skip). This is somewhat
  similar to running r2sync first in batch mode (-b) to synchronize
  all files that have no conflict and then again in interactive mode.
