Added RERR_VANISHED.
[rsync/rsync.git] / TODO
diff --git a/TODO b/TODO
index 704e579..31a013f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -99,9 +99,11 @@ Progress indicator can produce corrupt output when transferring directories:
   main/binary-arm/math/
   main/binary-arm/misc/
 
+
 lchmod
   I don't think we handle this properly on systems that don't have the
-  call.
+  call.  Are there any such?
+
 
 Cross-test versions
   Part of the regression suite should be making sure that we don't
@@ -138,10 +140,10 @@ rsyncd over ssh
 FEATURES ------------------------------------------------------------
 
 
---dry-run is insufficiently dry
+--dry-run is too dry
 
   Mark Santcroos points out that -n fails to list files which have
-  only metadata changes, though it probably should.  
+  only metadata changes, though it probably should.
 
   There may be a Debian bug about this as well.
 
@@ -157,13 +159,6 @@ use chroot
     http://lists.samba.org/pipermail/rsync/2001-September/thread.html
 
 
---files-from
-
-  Avoids traversal.  Better option than a pile of --include statements
-  for people who want to generate the file list using a find(1)
-  command or a script.
-
-
 supplementary groups
 
   Perhaps allow supplementary groups to be specified in rsyncd.conf;
@@ -174,13 +169,13 @@ supplementary groups
 File list structure in memory
 
   Rather than one big array, perhaps have a tree in memory mirroring
-  the directory tree.  
+  the directory tree.
 
   This might make sorting much faster!  (I'm not sure it's a big CPU
-  problem, mind you.)  
+  problem, mind you.)
 
   It might also reduce memory use in storing repeated directory names
-  -- again I'm not sure this is a problem.
+-- again I'm not sure this is a problem.
 
 Performance
 
@@ -201,7 +196,7 @@ Handling duplicate names
   through the pipeline at the same time.  For example we might have
   updated the first occurrence after reading the checksums for the
   second.  So possibly we just need to make sure that we don't have
-  both in the pipeline at the same time.  
+  both in the pipeline at the same time.
 
   Possibly if we did one directory at a time that would be sufficient.
 
@@ -247,7 +242,7 @@ Memory accounting
 Hard-link handling
 
   At the moment hardlink handling is very expensive, so it's off by
-  default.  It does not need to be so.  
+  default.  It does not need to be so.
 
   Since most of the solutions are rather intertwined with the file
   list it is probably better to fix that first, although fixing
@@ -261,7 +256,7 @@ Hard-link handling
   but I have not seen them.
 
   When trying to reproduce hard links, we only need to worry about
-  files that have more than one name (nlinks>1 && !S_ISDIR). 
+  files that have more than one name (nlinks>1 && !S_ISDIR).
 
   The basic point of this is to discover alternate names that refer to
   the same file.  All operations, including creating the file and
@@ -311,17 +306,39 @@ Hard-link handling
   might need a little program to check whether several names refer to
   the same file.
 
-IPv6
 
-  Put back the old socket code; if on a machine that does not properly
-  support the getaddrinfo API, then use it.  This is probably much
-  simpler than reimplementing it.  This might get us working again on
-  RedHat 5 and similar systems.  Although the Kame patch seems like a
-  good idea, in fact it is a much broader interface than the
-  relatively narrow "open by name", "accept and log" interface that
-  rsync uses internally, and it has the disadvantage of clashing with
-  half-arsed implementations of the API.
 
+Handling IPv6 on old machines
+
+  The KAME IPv6 patch is nice in theory but has proved a bit of a
+  nightmare in practice.  The basic idea of their patch is that rsync
+  is rewritten to use the new getaddrinfo()/getnameinfo() interface,
+  rather than gethostbyname()/gethostbyaddr() as in rsync 2.4.6.
+  Systems that don't have the new interface are handled by providing
+  our own implementation in lib/, which is selectively linked in.
+
+  The problem with this is that it is really hard to get right on
+  platforms that have a half-working implementation, so redefining
+  these functions clashes with system headers, and leaving them out
+  breaks.  This affects at least OSF/1, RedHat 5, and Cobalt, which
+  are moderately improtant.
+
+  Perhaps the simplest solution would be to have two different files
+  implementing the same interface, and choose either the new or the
+  old API.  This is probably necessary for systems that e.g. have
+  IPv6, but gethostbyaddr() can't handle it.  The Linux manpage claims
+  this is currently the case.
+
+  In fact, our internal sockets interface (things like
+  open_socket_out(), etc) is much narrower than the getaddrinfo()
+  interface, and so probably simpler to get right.  In addition, the
+  old code is known to work well on old machines.
+
+  We could drop the rather large lib/getaddrinfo files.
+
+
+Other IPv6 stuff:
+  
   Implement suggestions from http://www.kame.net/newsletter/19980604/
   and ftp://ftp.iij.ad.jp/pub/RFC/rfc2553.txt
 
@@ -337,8 +354,7 @@ IPv6
   colons, they tend to break most naming systems, including ours.
   Based on the HTTP IPv6 syntax, I think we should use
  
-     rsync://[::1]/foo/bar
-     [::1]::bar
+     rsync://[::1]/foo/bar [::1]::bar
 
   which should just take a small change to the parser code.
 
@@ -352,7 +368,7 @@ Errors
 
   "The dungeon collapses!  You are killed."  Rather than "unexpected
   eof" give a message that is more detailed if possible and also more
-  helpful.  
+  helpful.
 
   If we get an error writing to a socket, then we should perhaps
   continue trying to read to see if an error message comes across
@@ -360,8 +376,8 @@ Errors
   work, but it would certainly make our messages more helpful.
 
   What happens if a directory is missing -x attributes.  Do we lose
-  our load?  (Debian #28416)  Probably fixed now, but a test case
-  would be good.
+  our load?  (Debian #28416) Probably fixed now, but a test case would
+  be good.
 
 
 File attributes
@@ -382,7 +398,7 @@ Empty directories
 
 zlib
 
-  Perhaps don't use our own zlib.  
+  Perhaps don't use our own zlib.
 
   Advantages:
    
@@ -420,7 +436,7 @@ logging
 
   After we get the @RSYNCD greeting from the server, we know it's
   version but we have not yet sent the command line, so we could just
-  remove the -z option if the server is too old.  
+  remove the -z option if the server is too old.
 
   For ssh invocation it's not so simple, because we actually use the
   command line to start the remote process.  However, we only actually
@@ -429,14 +445,10 @@ logging
   that's a good tradeoff or not.
 
 
-rsyncd over ssh
-
-  There are already some patches to do this.
-
 proxy authentication
 
   Allow RSYNC_PROXY to be http://user:pass@proxy.foo:3128/, and do
-  HTTP Basic Proxy-Authentication.  
+  HTTP Basic Proxy-Authentication.
 
   Multiple schemes are possible, up to and including the insanity that
   is NTLM, but Basic probably covers most cases.
@@ -448,12 +460,12 @@ SOCKS
 
 FAT support
 
-  rsync to a FAT partition on a Unix machine doesn't work very well
-  at the moment.  I think we get errors about invalid filenames and 
+  rsync to a FAT partition on a Unix machine doesn't work very well at
+  the moment.  I think we get errors about invalid filenames and
   perhaps also trying to do atomic renames.
 
-  I guess the code to do this is currently #ifdef'd on Windows; perhaps
-  we ought to intelligently fall back to it on Unix too.
+  I guess the code to do this is currently #ifdef'd on Windows;
+  perhaps we ought to intelligently fall back to it on Unix too.
 
 
 Better statistics:
@@ -461,13 +473,10 @@ Better statistics:
   <Rasmus> mbp: hey, how about an rsync option that just gives you the
   summary without the list of files?  And perhaps gives more
   information like the number of new files, number of changed,
-  deleted, etc. ?
-  <mbp> Rasmus: nice idea
-  <mbp> there is --stats
-  <mbp> but at the moment it's very tridge-oriented
-  <mbp> rather than user-friendly
-  <mbp> it would be nice to improve it
-  <mbp> that would also work well with --dryrun
+  deleted, etc. ?  <mbp> Rasmus: nice idea <mbp> there is --stats
+  <mbp> but at the moment it's very tridge-oriented <mbp> rather than
+  user-friendly <mbp> it would be nice to improve it <mbp> that would
+  also work well with --dryrun
 
 TDB:
 
@@ -484,21 +493,21 @@ TDB:
 
 chmod:
 
-  On 12 Mar 2002, Dave Dykstra <dwd@bell-labs.com> wrote:
-  > If we would add an option to do that functionality, I would vote for one
-  > that was more general which could mask off any set of permission bits and
-  > possibly add any set of bits.  Perhaps a chmod-like syntax if it could be
-  > implemented simply.
+  On 12 Mar 2002, Dave Dykstra <dwd@bell-labs.com> wrote: > If we
+would add an option to do that functionality, I would vote for one >
+that was more general which could mask off any set of permission bits
+and > possibly add any set of bits.  Perhaps a chmod-like syntax if it
+could be > implemented simply.
 
-  I think that would be good too.  For example, people uploading files   
+  I think that would be good too.  For example, people uploading files
   to a web server might like to say
 
   rsync -avzP --chmod a+rX ./ sourcefrog.net:/home/www/sourcefrog/
 
   Ideally the patch would implement as many of the gnu chmod semantics
   as possible.  I think the mode parser should be a separate function
-  that passes back something like (mask,set) description to the rest of
-  the program.  For bonus points there would be a test case for the  
+  that passes back something like (mask,set) description to the rest
+  of the program.  For bonus points there would be a test case for the
   parser.
 
   Possibly also --chown
@@ -546,9 +555,9 @@ MD4 file_sum
   transport to have quite strong protection against corruption.
 
   Perhaps we should have an option to disable this, analogous to
-  --whole-file, although it would default to disabled.  The file
-  checksum takes up a definite space in the protocol -- we can either
-  set it to 0, or perhaps just leave it out.
+--whole-file, although it would default to disabled.  The file
+checksum takes up a definite space in the protocol -- we can either
+set it to 0, or perhaps just leave it out.
 
 MD4
 
@@ -571,13 +580,6 @@ Win32
 
   http://sources.redhat.com/ml/cygwin/2001-08/msg00234.html
 
-  According to "Effective TCP/IP Programming" (??) close() on a socket
-  has incorrect behaviour on Windows -- it sends a RST packet to the
-  other side, which gives a "connection reset by peer" error.  On that
-  platform we should probably do shutdown() instead.  However, on Unix
-  we are correct to call close(), because shutdown() discards
-  untransmitted data.
-
 
 DEVELOPMENT ----------------------------------------------------------
 
@@ -623,9 +625,9 @@ TESTING --------------------------------------------------------------
 Cross-test versions
 
   Part of the regression suite should be making sure that we don't
-  break backwards compatibility: old clients vs new servers and so
-  on.  Ideally we would test both up and down from the current release
-  to all old versions.
+  break backwards compatibility: old clients vs new servers and so on.
+  Ideally we would test both up and down from the current release to
+  all old versions.
 
   We might need to omit broken old versions, or versions in which
   particular functionality is broken
@@ -664,7 +666,8 @@ Test daemon feature to disallow particular options.
 
 Pipe program that makes slow/jerky connections.
 
-Versions of read() and write() that corrupt the stream, or abruptly fail
+Versions of read() and write() that corrupt the stream, or abruptly
+fail
 
 Separate makefile target to run rough tests -- or perhaps just run
 them every time?
@@ -701,8 +704,6 @@ BUILD FARM -----------------------------------------------------------
 
 Add machines
 
-  AMDAHL UTS (Dave Dykstra)
-
   Cygwin (on different versions of Win32?)
 
   HP-UX variants (via HP?)
@@ -760,7 +761,7 @@ hang/timeout friendliness
 internationalization
 
   Change to using gettext().  Probably need to ship this for platforms
-  that don't have it.  
+  that don't have it.
 
   Solicit translations.
 
@@ -768,7 +769,7 @@ internationalization
   get the manual translated first, because that's possibly more useful
   and at any rate demonstrates desire.
 
-rsyncsh 
+rsyncsh
 
    Write a small emulation of interactive ftp as a Pythonn program
    that calls rsync.  Commands such as "cd", "ls", "ls *.c" etc map
@@ -793,3 +794,5 @@ reverse rsync over HTTP Range
 
   Goswin Brederlow suggested this on Debian; I think tridge and I
   talked about it previous in relation to rproxy.
+
+