Changed the rdev code to have both an "rdev" variable (which always
[rsync/rsync.git] / TODO
... / ...
CommitLineData
1-*- indented-text -*-
2
3BUGS ---------------------------------------------------------------
4Fix progress indicator to not corrupt log
5lchmod question
6Do not rely on having a group called "nobody"
7Incorrect timestamps (Debian #100295)
8Win32
9
10FEATURES ------------------------------------------------------------
11server-imposed bandwidth limits
12rsyncd over ssh
13Use chroot only if supported
14Allow supplementary groups in rsyncd.conf 2002/04/09
15Handling IPv6 on old machines
16Other IPv6 stuff:
17Add ACL support 2001/12/02
18Lazy directory creation
19Conditional -z for old protocols
20proxy authentication 2002/01/23
21SOCKS 2002/01/23
22FAT support
23Allow forcing arbitrary permissions 2002/03/12
24--diff david.e.sewell 2002/03/15
25Add daemon --no-detach and --no-fork options
26Create more granular verbosity jw 2003/05/15
27
28DOCUMENTATION --------------------------------------------------------
29Update README
30Keep list of open issues and todos on the web site
31Update web site from CVS
32Perhaps redo manual as SGML
33
34LOGGING --------------------------------------------------------------
35Make dry run list all updates 2002/04/03
36Memory accounting
37Improve error messages
38Better statistics: Rasmus 2002/03/08
39Perhaps flush stdout like syslog
40Log deamon sessions that just list modules
41Log child death on signal
42Keep stderr and stdout properly separated (Debian #23626)
43Log errors with function that reports process of origin
44verbose output David Stein 2001/12/20
45Add reason for transfer to file logging
46debugging of daemon 2002/04/08
47internationalization
48
49DEVELOPMENT --------------------------------------------------------
50Handling duplicate names
51Use generic zlib 2002/02/25
52TDB: 2002/03/12
53Splint 2002/03/12
54Memory debugger
55Create release script
56Add machines to build farm
57
58PERFORMANCE ----------------------------------------------------------
59File list structure in memory
60Traverse just one directory at a time
61Hard-link handling
62Allow skipping MD4 file_sum 2002/04/08
63Accelerate MD4
64String area code
65
66TESTING --------------------------------------------------------------
67Torture test
68Cross-test versions 2001/08/22
69Test on kernel source
70Test large files
71Create mutator program for testing
72Create configure option to enable dangerous tests
73If tests are skipped, say why.
74Test daemon feature to disallow particular options.
75Create pipe program for testing
76Create test makefile target for some tests
77Test "refuse options" works
78
79RELATED PROJECTS -----------------------------------------------------
80rsyncsh
81http://rsync.samba.org/rsync-and-debian/
82rsyncable gzip patch
83rsyncsplit as alternative to real integration with gzip?
84reverse rsync over HTTP Range
85
86
87
88BUGS ---------------------------------------------------------------
89
90Fix progress indicator to not corrupt log
91
92 Progress indicator can produce corrupt output when transferring directories:
93
94 main/binary-arm/
95 main/binary-arm/admin/
96 main/binary-arm/base/
97 main/binary-arm/comm/8.56kB/s 0:00:52
98 main/binary-arm/devel/
99 main/binary-arm/doc/
100 main/binary-arm/editors/
101 main/binary-arm/electronics/s 0:00:53
102 main/binary-arm/games/
103 main/binary-arm/graphics/
104 main/binary-arm/hamradio/
105 main/binary-arm/interpreters/
106 main/binary-arm/libs/6.61kB/s 0:00:54
107 main/binary-arm/mail/
108 main/binary-arm/math/
109 main/binary-arm/misc/
110
111 -- --
112
113
114lchmod question
115
116 I don't think we handle this properly on systems that don't have the
117 call. Are there any such?
118
119 -- --
120
121
122Do not rely on having a group called "nobody"
123
124 http://www.linuxbase.org/spec/refspecs/LSB_1.1.0/gLSB/usernames.html
125
126 On Debian it's "nogroup"
127
128 -- --
129
130
131Incorrect timestamps (Debian #100295)
132
133 A bit hard to believe, but apparently it happens.
134
135 -- --
136
137
138Win32
139
140 Don't detach, because this messes up --srvany.
141
142 http://sources.redhat.com/ml/cygwin/2001-08/msg00234.html
143
144
145
146 -- --
147
148FEATURES ------------------------------------------------------------
149
150server-imposed bandwidth limits
151
152 -- --
153
154
155rsyncd over ssh
156
157 There are already some patches to do this.
158
159 BitKeeper uses a server whose login shell is set to bkd. That's
160 probably a reasonable approach.
161
162 -- --
163
164
165Use chroot only if supported
166
167 If the platform doesn't support it, then don't even try.
168
169 If running as non-root, then don't fail, just give a warning.
170 (There was a thread about this a while ago?)
171
172 http://lists.samba.org/pipermail/rsync/2001-August/thread.html
173 http://lists.samba.org/pipermail/rsync/2001-September/thread.html
174
175 -- --
176
177
178Allow supplementary groups in rsyncd.conf 2002/04/09
179
180 Perhaps allow supplementary groups to be specified in rsyncd.conf;
181 then make the first one the primary gid and all the rest be
182 supplementary gids.
183
184 -- --
185
186
187Handling IPv6 on old machines
188
189 The KAME IPv6 patch is nice in theory but has proved a bit of a
190 nightmare in practice. The basic idea of their patch is that rsync
191 is rewritten to use the new getaddrinfo()/getnameinfo() interface,
192 rather than gethostbyname()/gethostbyaddr() as in rsync 2.4.6.
193 Systems that don't have the new interface are handled by providing
194 our own implementation in lib/, which is selectively linked in.
195
196 The problem with this is that it is really hard to get right on
197 platforms that have a half-working implementation, so redefining
198 these functions clashes with system headers, and leaving them out
199 breaks. This affects at least OSF/1, RedHat 5, and Cobalt, which
200 are moderately improtant.
201
202 Perhaps the simplest solution would be to have two different files
203 implementing the same interface, and choose either the new or the
204 old API. This is probably necessary for systems that e.g. have
205 IPv6, but gethostbyaddr() can't handle it. The Linux manpage claims
206 this is currently the case.
207
208 In fact, our internal sockets interface (things like
209 open_socket_out(), etc) is much narrower than the getaddrinfo()
210 interface, and so probably simpler to get right. In addition, the
211 old code is known to work well on old machines.
212
213 We could drop the rather large lib/getaddrinfo files.
214
215 -- --
216
217
218Other IPv6 stuff:
219
220 Implement suggestions from http://www.kame.net/newsletter/19980604/
221 and ftp://ftp.iij.ad.jp/pub/RFC/rfc2553.txt
222
223 If a host has multiple addresses, then listen try to connect to all
224 in order until we get through. (getaddrinfo may return multiple
225 addresses.) This is kind of implemented already.
226
227 Possibly also when starting as a server we may need to listen on
228 multiple passive addresses. This might be a bit harder, because we
229 may need to select on all of them. Hm.
230
231 Define a syntax for IPv6 literal addresses. Since they include
232 colons, they tend to break most naming systems, including ours.
233 Based on the HTTP IPv6 syntax, I think we should use
234
235 rsync://[::1]/foo/bar [::1]::bar
236
237 which should just take a small change to the parser code.
238
239 -- --
240
241
242Add ACL support 2001/12/02
243
244 Transfer ACLs. Need to think of a standard representation.
245 Probably better not to even try to convert between NT and POSIX.
246 Possibly can share some code with Samba.
247
248 -- --
249
250
251Lazy directory creation
252
253 With the current common --include '*/' --exclude '*' pattern, people
254 can end up with many empty directories. We might avoid this by
255 lazily creating such directories.
256
257 -- --
258
259
260Conditional -z for old protocols
261
262 After we get the @RSYNCD greeting from the server, we know it's
263 version but we have not yet sent the command line, so we could just
264 remove the -z option if the server is too old.
265
266 For ssh invocation it's not so simple, because we actually use the
267 command line to start the remote process. However, we only actually
268 do compression in token.c, and we could therefore once we discover
269 the remote version emit an error if it's too old. I'm not sure if
270 that's a good tradeoff or not.
271
272 -- --
273
274
275proxy authentication 2002/01/23
276
277 Allow RSYNC_PROXY to be http://user:pass@proxy.foo:3128/, and do
278 HTTP Basic Proxy-Authentication.
279
280 Multiple schemes are possible, up to and including the insanity that
281 is NTLM, but Basic probably covers most cases.
282
283 -- --
284
285
286SOCKS 2002/01/23
287
288 Add --with-socks, and then perhaps a command-line option to put them
289 on or off. This might be more reliable than LD_PRELOAD hacks.
290
291 -- --
292
293
294FAT support
295
296 rsync to a FAT partition on a Unix machine doesn't work very well at
297 the moment. I think we get errors about invalid filenames and
298 perhaps also trying to do atomic renames.
299
300 I guess the code to do this is currently #ifdef'd on Windows;
301 perhaps we ought to intelligently fall back to it on Unix too.
302
303 -- --
304
305
306Allow forcing arbitrary permissions 2002/03/12
307
308 On 12 Mar 2002, Dave Dykstra <dwd@bell-labs.com> wrote:
309 > If we would add an option to do that functionality, I
310 > would vote for one that was more general which could mask
311 > off any set of permission bits and possibly add any set of
312 > bits. Perhaps a chmod-like syntax if it could be
313 > implemented simply.
314
315 I think that would be good too. For example, people uploading files
316 to a web server might like to say
317
318 rsync -avzP --chmod a+rX ./ sourcefrog.net:/home/www/sourcefrog/
319
320 Ideally the patch would implement as many of the gnu chmod semantics
321 as possible. I think the mode parser should be a separate function
322 that passes back something like (mask,set) description to the rest
323 of the program. For bonus points there would be a test case for the
324 parser.
325
326 Possibly also --chown
327
328 (Debian #23628)
329
330 -- --
331
332
333--diff david.e.sewell 2002/03/15
334
335 Allow people to specify the diff command. (Might want to use wdiff,
336 gnudiff, etc.)
337
338 Just diff the temporary file with the destination file, and delete
339 the tmp file rather than moving it into place.
340
341 Interaction with --partial.
342
343 Security interactions with daemon mode?
344
345 -- --
346
347
348Add daemon --no-detach and --no-fork options
349
350 Very useful for debugging. Also good when running under a
351 daemon-monitoring process that tries to restart the service when the
352 parent exits.
353
354 -- --
355
356
357Create more granular verbosity jw 2003/05/15
358
359 Control output with the --report option.
360
361 The option takes as a single argument (no whitespace) a
362 comma delimited lists of keywords.
363
364 This would separate debugging from "logging" as well as
365 fine grained selection of statistical reporting and what
366 actions are logged.
367
368 http://lists.samba.org/archive/rsync/2003-May/006059.html
369
370 -- --
371
372DOCUMENTATION --------------------------------------------------------
373
374Update README
375
376 -- --
377
378
379Keep list of open issues and todos on the web site
380
381 -- --
382
383
384Update web site from CVS
385
386 -- --
387
388
389Perhaps redo manual as SGML
390
391 The man page is getting rather large, and there is more information
392 that ought to be added.
393
394 TexInfo source is probably a dying format.
395
396 Linuxdoc looks like the most likely contender. I know DocBook is
397 favoured by some people, but it's so bloody verbose, even with emacs
398 support.
399
400 -- --
401
402LOGGING --------------------------------------------------------------
403
404Make dry run list all updates 2002/04/03
405
406 --dry-run is too dry
407
408 Mark Santcroos points out that -n fails to list files which have
409 only metadata changes, though it probably should.
410
411 There may be a Debian bug about this as well.
412
413 -- --
414
415
416Memory accounting
417
418 At exit, show how much memory was used for the file list, etc.
419
420 Also we do a wierd exponential-growth allocation in flist.c. I'm
421 not sure this makes sense with modern mallocs. At any rate it will
422 make us allocate a huge amount of memory for large file lists.
423
424 -- --
425
426
427Improve error messages
428
429 If we hang or get SIGINT, then explain where we were up to. Perhaps
430 have a static buffer that contains the current function name, or
431 some kind of description of what we were trying to do. This is a
432 little easier on people than needing to run strace/truss.
433
434 "The dungeon collapses! You are killed." Rather than "unexpected
435 eof" give a message that is more detailed if possible and also more
436 helpful.
437
438 If we get an error writing to a socket, then we should perhaps
439 continue trying to read to see if an error message comes across
440 explaining why the socket is closed. I'm not sure if this would
441 work, but it would certainly make our messages more helpful.
442
443 What happens if a directory is missing -x attributes. Do we lose
444 our load? (Debian #28416) Probably fixed now, but a test case would
445 be good.
446
447
448
449 -- --
450
451
452Better statistics: Rasmus 2002/03/08
453
454 <Rasmus>
455 hey, how about an rsync option that just gives you the
456 summary without the list of files? And perhaps gives
457 more information like the number of new files, number
458 of changed, deleted, etc. ?
459
460 <mbp>
461 nice idea there is --stats but at the moment it's very
462 tridge-oriented rather than user-friendly it would be
463 nice to improve it that would also work well with
464 --dryrun
465
466 -- --
467
468
469Perhaps flush stdout like syslog
470
471 Perhaps flush stdout after each filename, so that people trying to
472 monitor progress in a log file can do so more easily. See
473 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=48108
474
475 -- --
476
477
478Log deamon sessions that just list modules
479
480 At the connections that just get a list of modules are not logged,
481 but they should be.
482
483 -- --
484
485
486Log child death on signal
487
488 If a child of the rsync daemon dies with a signal, we should notice
489 that when we reap it and log a message.
490
491 -- --
492
493
494Keep stderr and stdout properly separated (Debian #23626)
495
496 -- --
497
498
499Log errors with function that reports process of origin
500
501 Use a separate function for reporting errors; prefix it with
502 "rsync:" or "rsync(remote)", or perhaps even "rsync(local
503 generator): ".
504
505 -- --
506
507
508verbose output David Stein 2001/12/20
509
510 Indicate whether files are new, updated, or deleted
511
512 At end of transfer, show how many files were or were not transferred
513 correctly.
514
515 -- --
516
517
518Add reason for transfer to file logging
519
520 Explain *why* every file is transferred or not (e.g. "local mtime
521 123123 newer than 1283198")
522
523 -- --
524
525
526debugging of daemon 2002/04/08
527
528 Add an rsyncd.conf parameter to turn on debugging on the server.
529
530 -- --
531
532
533internationalization
534
535 Change to using gettext(). Probably need to ship this for platforms
536 that don't have it.
537
538 Solicit translations.
539
540 Does anyone care? Before we bother modifying the code, we ought to
541 get the manual translated first, because that's possibly more useful
542 and at any rate demonstrates desire.
543
544 -- --
545
546DEVELOPMENT --------------------------------------------------------
547
548Handling duplicate names
549
550 We need to be careful of duplicate names getting into the file list.
551 See clean_flist(). This could happen if multiple arguments include
552 the same file. Bad.
553
554 I think duplicates are only a problem if they're both flowing
555 through the pipeline at the same time. For example we might have
556 updated the first occurrence after reading the checksums for the
557 second. So possibly we just need to make sure that we don't have
558 both in the pipeline at the same time.
559
560 Possibly if we did one directory at a time that would be sufficient.
561
562 Alternatively we could pre-process the arguments to make sure no
563 duplicates will ever be inserted. There could be some bad cases
564 when we're collapsing symlinks.
565
566 We could have a hash table.
567
568 The root of the problem is that we do not want more than one file
569 list entry referring to the same file. At first glance there are
570 several ways this could happen: symlinks, hardlinks, and repeated
571 names on the command line.
572
573 If names are repeated on the command line, they may be present in
574 different forms, perhaps by traversing directory paths in different
575 ways, traversing paths including symlinks. Also we need to allow
576 for expansion of globs by rsync.
577
578 At the moment, clean_flist() requires having the entire file list in
579 memory. Duplicate names are detected just by a string comparison.
580
581 We don't need to worry about hard links causing duplicates because
582 files are never updated in place. Similarly for symlinks.
583
584 I think even if we're using a different symlink mode we don't need
585 to worry.
586
587 Unless we're really clever this will introduce a protocol
588 incompatibility, so we need to be able to accept the old format as
589 well.
590
591 -- --
592
593
594Use generic zlib 2002/02/25
595
596 Perhaps don't use our own zlib.
597
598 Advantages:
599
600 - will automatically be up to date with bugfixes in zlib
601
602 - can leave it out for small rsync on e.g. recovery disks
603
604 - can use a shared library
605
606 - avoids people breaking rsync by trying to do this themselves and
607 messing up
608
609 Should we ship zlib for systems that don't have it, or require
610 people to install it separately?
611
612 Apparently this will make us incompatible with versions of rsync
613 that use the patched version of rsync. Probably the simplest way to
614 do this is to just disable gzip (with a warning) when talking to old
615 versions.
616
617 -- --
618
619
620TDB: 2002/03/12
621
622 Rather than storing the file list in memory, store it in a TDB.
623
624 This *might* make memory usage lower while building the file list.
625
626 Hashtable lookup will mean files are not transmitted in order,
627 though... hm.
628
629 This would neatly eliminate one of the major post-fork shared data
630 structures.
631
632 -- --
633
634
635Splint 2002/03/12
636
637 Build rsync with SPLINT to try to find security holes. Add
638 annotations as necessary. Keep track of the number of warnings
639 found initially, and see how many of them are real bugs, or real
640 security bugs. Knowing the percentage of likely hits would be
641 really interesting for other projects.
642
643 -- --
644
645
646Memory debugger
647
648 jra recommends Valgrind:
649
650 http://devel-home.kde.org/~sewardj/
651
652 -- --
653
654
655Create release script
656
657 Script would:
658
659 Update spec files
660
661 Build tar file; upload
662
663 Send announcement to mailing list and c.o.l.a.
664
665 Make freshmeat announcement
666
667 Update web site
668
669 -- --
670
671
672Add machines to build farm
673
674 Cygwin (on different versions of Win32?)
675
676 HP-UX variants (via HP?)
677
678 SCO
679
680
681
682 -- --
683
684PERFORMANCE ----------------------------------------------------------
685
686File list structure in memory
687
688 Rather than one big array, perhaps have a tree in memory mirroring
689 the directory tree.
690
691 This might make sorting much faster! (I'm not sure it's a big CPU
692 problem, mind you.)
693
694 It might also reduce memory use in storing repeated directory names
695 -- again I'm not sure this is a problem.
696
697 -- --
698
699
700Traverse just one directory at a time
701
702 Traverse just one directory at a time. Tridge says it's possible.
703
704 At the moment rsync reads the whole file list into memory at the
705 start, which makes us use a lot of memory and also not pipeline
706 network access as much as we could.
707
708 -- --
709
710
711Hard-link handling
712
713 At the moment hardlink handling is very expensive, so it's off by
714 default. It does not need to be so.
715
716 Since most of the solutions are rather intertwined with the file
717 list it is probably better to fix that first, although fixing
718 hardlinks is possibly simpler.
719
720 We can rule out hardlinked directories since they will probably
721 screw us up in all kinds of ways. They simply should not be used.
722
723 At the moment rsync only cares about hardlinks to regular files. I
724 guess you could also use them for sockets, devices and other beasts,
725 but I have not seen them.
726
727 When trying to reproduce hard links, we only need to worry about
728 files that have more than one name (nlinks>1 && !S_ISDIR).
729
730 The basic point of this is to discover alternate names that refer to
731 the same file. All operations, including creating the file and
732 writing modifications to it need only to be done for the first name.
733 For all later names, we just create the link and then leave it
734 alone.
735
736 If hard links are to be preserved:
737
738 Before the generator/receiver fork, the list of files is received
739 from the sender (recv_file_list), and a table for detecting hard
740 links is built.
741
742 The generator looks for hard links within the file list and does
743 not send checksums for them, though it does send other metadata.
744
745 The sender sends the device number and inode with file entries, so
746 that files are uniquely identified.
747
748 The receiver goes through and creates hard links (do_hard_links)
749 after all data has been written, but before directory permissions
750 are set.
751
752 At the moment device and inum are sent as 4-byte integers, which
753 will probably cause problems on large filesystems. On Linux the
754 kernel uses 64-bit ino_t's internally, and people will soon have
755 filesystems big enough to use them. We ought to follow NFS4 in
756 using 64-bit device and inode identification, perhaps with a
757 protocol version bump.
758
759 Once we've seen all the names for a particular file, we no longer
760 need to think about it and we can deallocate the memory.
761
762 We can also have the case where there are links to a file that are
763 not in the tree being transferred. There's nothing we can do about
764 that. Because we rename the destination into place after writing,
765 any hardlinks to the old file are always going to be orphaned. In
766 fact that is almost necessary because otherwise we'd get really
767 confused if we were generating checksums for one name of a file and
768 modifying another.
769
770 At the moment the code seems to make a whole second copy of the file
771 list, which seems unnecessary.
772
773 We should have a test case that exercises hard links. Since it
774 might be hard to compare ./tls output where the inodes change we
775 might need a little program to check whether several names refer to
776 the same file.
777
778 -- --
779
780
781Allow skipping MD4 file_sum 2002/04/08
782
783 If we're doing a local transfer, or using -W, then perhaps don't
784 send the file checksum. If we're doing a local transfer, then
785 calculating MD4 checksums uses 90% of CPU and is unlikely to be
786 useful.
787
788 Indeed for transfers over zlib or ssh we can also rely on the
789 transport to have quite strong protection against corruption.
790
791 Perhaps we should have an option to disable this,
792 analogous to --whole-file, although it would default to
793 disabled. The file checksum takes up a definite space in
794 the protocol -- we can either set it to 0, or perhaps just
795 leave it out.
796
797 -- --
798
799
800Accelerate MD4
801
802 Perhaps borrow an assembler MD4 from someone?
803
804 Make sure we call MD4 with properly-sized blocks whenever possible
805 to avoid copying into the residue region?
806
807 -- --
808
809
810String area code
811
812 Test whether this is actually faster than just using malloc(). If
813 it's not (anymore), throw it out.
814
815 -- --
816
817TESTING --------------------------------------------------------------
818
819Torture test
820
821 Something that just keeps running rsync continuously over a data set
822 likely to generate problems.
823
824 -- --
825
826
827Cross-test versions 2001/08/22
828
829 Part of the regression suite should be making sure that we
830 don't break backwards compatibility: old clients vs new
831 servers and so on. Ideally we would test both up and down
832 from the current release to all old versions.
833
834 Run current rsync versions against significant past releases.
835
836 We might need to omit broken old versions, or versions in which
837 particular functionality is broken
838
839 It might be sufficient to test downloads from well-known public
840 rsync servers running different versions of rsync. This will give
841 some testing and also be the most common case for having different
842 versions and not being able to upgrade.
843
844 The new --protocol option may help in this.
845
846 -- --
847
848
849Test on kernel source
850
851 Download all versions of kernel; unpack, sync between them. Also
852 sync between uncompressed tarballs. Compare directories after
853 transfer.
854
855 Use local mode; ssh; daemon; --whole-file and --no-whole-file.
856
857 Use awk to pull out the 'speedup' number for each transfer. Make
858 sure it is >= x.
859
860 -- --
861
862
863Test large files
864
865 Sparse and non-sparse
866
867 -- --
868
869
870Create mutator program for testing
871
872 Insert bytes, delete bytes, swap blocks, ...
873
874 -- --
875
876
877Create configure option to enable dangerous tests
878
879 -- --
880
881
882If tests are skipped, say why.
883
884 -- --
885
886
887Test daemon feature to disallow particular options.
888
889 -- --
890
891
892Create pipe program for testing
893
894 Create pipe program that makes slow/jerky connections for
895 testing Versions of read() and write() that corrupt the
896 stream, or abruptly fail
897
898 -- --
899
900
901Create test makefile target for some tests
902
903 Separate makefile target to run rough tests -- or perhaps
904 just run them every time?
905
906 -- --
907
908
909Test "refuse options" works
910
911 What about for --recursive?
912
913 If you specify an unrecognized option here, you should get an error.
914
915 We need a test case for this...
916
917 Was this broken when we changed to popt?
918
919 -- --
920
921RELATED PROJECTS -----------------------------------------------------
922
923rsyncsh
924
925 Write a small emulation of interactive ftp as a Pythonn program
926 that calls rsync. Commands such as "cd", "ls", "ls *.c" etc map
927 fairly directly into rsync commands: it just needs to remember the
928 current host, directory and so on. We can probably even do
929 completion of remote filenames.
930
931 -- --
932
933
934http://rsync.samba.org/rsync-and-debian/
935
936
937 -- --
938
939
940rsyncable gzip patch
941
942 Exhaustive, tortuous testing
943
944 Cleanups?
945
946 -- --
947
948
949rsyncsplit as alternative to real integration with gzip?
950
951 -- --
952
953
954reverse rsync over HTTP Range
955
956 Goswin Brederlow suggested this on Debian; I think tridge and I
957 talked about it previous in relation to rproxy.
958
959 -- --
960