Changed the rdev code to have both an "rdev" variable (which always
[rsync/rsync.git] / TODO
CommitLineData
46ef7d1d 1-*- indented-text -*-
a0365806 2
259c3e72 3BUGS ---------------------------------------------------------------
abb0b532
S
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
16a3fec0 26Create more granular verbosity jw 2003/05/15
abb0b532
S
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
259c3e72 86
abb0b532
S
87
88BUGS ---------------------------------------------------------------
89
abb0b532
S
90Fix progress indicator to not corrupt log
91
92 Progress indicator can produce corrupt output when transferring directories:
e4724e5c
MP
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
abb0b532
S
111 -- --
112
113
114lchmod question
7e28fca1 115
e4724e5c 116 I don't think we handle this properly on systems that don't have the
7e28fca1
MP
117 call. Are there any such?
118
abb0b532 119 -- --
e4724e5c 120
5ba268ef 121
8bd1a73e
MP
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"
e4724e5c 127
abb0b532 128 -- --
b3e6c815 129
d2e9d069 130
abb0b532 131Incorrect timestamps (Debian #100295)
d2e9d069 132
abb0b532 133 A bit hard to believe, but apparently it happens.
d2e9d069 134
abb0b532 135 -- --
d2e9d069 136
d2e9d069 137
abb0b532 138Win32
0e5a1f83 139
abb0b532 140 Don't detach, because this messes up --srvany.
0e5a1f83 141
abb0b532 142 http://sources.redhat.com/ml/cygwin/2001-08/msg00234.html
a6a3c3df 143
a6a3c3df 144
b3e6c815 145
abb0b532 146 -- --
0e5a1f83 147
abb0b532 148FEATURES ------------------------------------------------------------
a6a3c3df 149
abb0b532 150server-imposed bandwidth limits
a6a3c3df 151
abb0b532 152 -- --
0e5a1f83 153
a6a3c3df 154
abb0b532 155rsyncd over ssh
a6a3c3df 156
abb0b532 157 There are already some patches to do this.
a6a3c3df 158
abb0b532
S
159 BitKeeper uses a server whose login shell is set to bkd. That's
160 probably a reasonable approach.
a6a3c3df 161
abb0b532 162 -- --
a6a3c3df 163
a6a3c3df 164
abb0b532 165Use chroot only if supported
a6a3c3df 166
abb0b532 167 If the platform doesn't support it, then don't even try.
a6a3c3df 168
abb0b532
S
169 If running as non-root, then don't fail, just give a warning.
170 (There was a thread about this a while ago?)
a6a3c3df 171
abb0b532
S
172 http://lists.samba.org/pipermail/rsync/2001-August/thread.html
173 http://lists.samba.org/pipermail/rsync/2001-September/thread.html
a6a3c3df 174
abb0b532 175 -- --
a6a3c3df 176
a6a3c3df 177
abb0b532 178Allow supplementary groups in rsyncd.conf 2002/04/09
a6a3c3df 179
abb0b532
S
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.
a2d2e5c0 183
abb0b532 184 -- --
a2d2e5c0 185
bde47ca7 186
411acbbc 187Handling IPv6 on old machines
bde47ca7 188
411acbbc
MP
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.
c7d692c3 195
411acbbc
MP
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
abb0b532
S
215 -- --
216
411acbbc
MP
217
218Other IPv6 stuff:
219
c33e3e39
MP
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
c10b0bdd 225 addresses.) This is kind of implemented already.
c33e3e39
MP
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
a2d2e5c0
MP
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
a577af90 235 rsync://[::1]/foo/bar [::1]::bar
a2d2e5c0
MP
236
237 which should just take a small change to the parser code.
238
abb0b532 239 -- --
b17dd0c4
MP
240
241
abb0b532 242Add ACL support 2001/12/02
5575de14 243
5575de14
MP
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.
5aafd07b 247
abb0b532
S
248 -- --
249
250
251Lazy directory creation
28a69e25
MP
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
abb0b532 257 -- --
c6e27b60 258
28a69e25 259
abb0b532 260Conditional -z for old protocols
c6e27b60 261
abb0b532
S
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.
c6e27b60 265
abb0b532
S
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.
c6e27b60 271
abb0b532 272 -- --
5ba268ef 273
5ba268ef 274
abb0b532 275proxy authentication 2002/01/23
92325ada
MP
276
277 Allow RSYNC_PROXY to be http://user:pass@proxy.foo:3128/, and do
a577af90 278 HTTP Basic Proxy-Authentication.
92325ada
MP
279
280 Multiple schemes are possible, up to and including the insanity that
281 is NTLM, but Basic probably covers most cases.
282
abb0b532
S
283 -- --
284
285
286SOCKS 2002/01/23
92325ada
MP
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
abb0b532
S
291 -- --
292
293
5ba268ef
MP
294FAT support
295
a577af90
PG
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
5ba268ef
MP
298 perhaps also trying to do atomic renames.
299
a577af90
PG
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.
5ba268ef 302
abb0b532 303 -- --
5ba268ef 304
27741d9f 305
abb0b532 306Allow forcing arbitrary permissions 2002/03/12
e53fe9a2 307
abb0b532
S
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.
97e1254a 314
a577af90 315 I think that would be good too. For example, people uploading files
97e1254a
MP
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
a577af90
PG
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
97e1254a
MP
324 parser.
325
8bd1a73e
MP
326 Possibly also --chown
327
36692011
MP
328 (Debian #23628)
329
abb0b532 330 -- --
97e1254a 331
abb0b532
S
332
333--diff david.e.sewell 2002/03/15
3c1edccb
MP
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
abb0b532 345 -- --
3c1edccb
MP
346
347
abb0b532 348Add daemon --no-detach and --no-fork options
a628b069 349
abb0b532
S
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.
6d19c674 353
abb0b532 354 -- --
6d19c674 355
16a3fec0
S
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
abb0b532 372DOCUMENTATION --------------------------------------------------------
6d19c674 373
abb0b532 374Update README
6d19c674 375
abb0b532 376 -- --
6479c2ed
MP
377
378
abb0b532 379Keep list of open issues and todos on the web site
bd0ad74f 380
abb0b532 381 -- --
bd0ad74f 382
bd0ad74f 383
abb0b532 384Update web site from CVS
bd0ad74f 385
abb0b532 386 -- --
bd0ad74f 387
bd0ad74f 388
abb0b532 389Perhaps redo manual as SGML
bd0ad74f 390
abb0b532
S
391 The man page is getting rather large, and there is more information
392 that ought to be added.
bd0ad74f 393
abb0b532 394 TexInfo source is probably a dying format.
6479c2ed 395
abb0b532
S
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.
a628b069 399
abb0b532 400 -- --
a2d2e5c0 401
abb0b532 402LOGGING --------------------------------------------------------------
a2d2e5c0 403
abb0b532
S
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.
a2d2e5c0 446
a2d2e5c0 447
5ba268ef 448
abb0b532 449 -- --
0e23e41d 450
abb0b532
S
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
0e23e41d
MP
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
abb0b532 643 -- --
f5a95bb5 644
f5a95bb5 645
43a4dc10
MP
646Memory debugger
647
3a79260d 648 jra recommends Valgrind:
43a4dc10
MP
649
650 http://devel-home.kde.org/~sewardj/
651
abb0b532
S
652 -- --
653
654
655Create release script
25ff30e8 656
abb0b532 657 Script would:
25ff30e8 658
abb0b532 659 Update spec files
25ff30e8 660
abb0b532
S
661 Build tar file; upload
662
663 Send announcement to mailing list and c.o.l.a.
25ff30e8 664
abb0b532 665 Make freshmeat announcement
25ff30e8 666
abb0b532 667 Update web site
25ff30e8 668
abb0b532 669 -- --
25ff30e8
MP
670
671
abb0b532 672Add machines to build farm
e9c4c301 673
abb0b532 674 Cygwin (on different versions of Win32?)
e9c4c301 675
abb0b532 676 HP-UX variants (via HP?)
25ff30e8 677
abb0b532 678 SCO
e9c4c301 679
e9c4c301 680
25ff30e8 681
abb0b532 682 -- --
25ff30e8 683
abb0b532 684PERFORMANCE ----------------------------------------------------------
25ff30e8 685
abb0b532 686File list structure in memory
25ff30e8 687
abb0b532
S
688 Rather than one big array, perhaps have a tree in memory mirroring
689 the directory tree.
25ff30e8 690
abb0b532
S
691 This might make sorting much faster! (I'm not sure it's a big CPU
692 problem, mind you.)
25ff30e8 693
abb0b532
S
694 It might also reduce memory use in storing repeated directory names
695 -- again I'm not sure this is a problem.
e9c4c301 696
abb0b532 697 -- --
e9c4c301 698
e9c4c301 699
abb0b532 700Traverse just one directory at a time
e9c4c301 701
abb0b532 702 Traverse just one directory at a time. Tridge says it's possible.
e9c4c301 703
abb0b532
S
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.
e9c4c301 707
abb0b532 708 -- --
b73b51a9 709
599dc93c 710
abb0b532 711Hard-link handling
76533c52 712
abb0b532
S
713 At the moment hardlink handling is very expensive, so it's off by
714 default. It does not need to be so.
6479c2ed 715
abb0b532
S
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.
717eb9b8 719
abb0b532
S
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.
717eb9b8 722
abb0b532
S
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.
717eb9b8 726
abb0b532
S
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).
e9c4c301 729
abb0b532
S
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.
7c583c73 735
abb0b532 736 If hard links are to be preserved:
7c583c73 737
abb0b532
S
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.
b73b51a9 741
abb0b532
S
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.
b73b51a9 744
abb0b532
S
745 The sender sends the device number and inode with file entries, so
746 that files are uniquely identified.
5af50297 747
abb0b532
S
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.
5af50297 751
abb0b532
S
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.
5af50297 758
abb0b532
S
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.
5af50297 761
abb0b532
S
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.
5af50297 769
abb0b532
S
770 At the moment the code seems to make a whole second copy of the file
771 list, which seems unnecessary.
5af50297 772
abb0b532
S
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.
a2d2e5c0 777
abb0b532 778 -- --
a2d2e5c0 779
a2d2e5c0 780
abb0b532 781Allow skipping MD4 file_sum 2002/04/08
33d213bb 782
abb0b532
S
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.
5aafd07b 787
abb0b532
S
788 Indeed for transfers over zlib or ssh we can also rely on the
789 transport to have quite strong protection against corruption.
46ef7d1d 790
abb0b532
S
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.
a2d2e5c0 796
abb0b532 797 -- --
a2d2e5c0 798
62b68c80 799
abb0b532 800Accelerate MD4
62b68c80 801
abb0b532 802 Perhaps borrow an assembler MD4 from someone?
62b68c80 803
abb0b532
S
804 Make sure we call MD4 with properly-sized blocks whenever possible
805 to avoid copying into the residue region?
a2d2e5c0 806
abb0b532 807 -- --
50f2f002 808
d834adc1 809
abb0b532 810String area code
62b68c80 811
abb0b532
S
812 Test whether this is actually faster than just using malloc(). If
813 it's not (anymore), throw it out.
62b68c80 814
abb0b532 815 -- --
62b68c80 816
abb0b532 817TESTING --------------------------------------------------------------
8ff9d697 818
abb0b532 819Torture test
8ff9d697 820
abb0b532
S
821 Something that just keeps running rsync continuously over a data set
822 likely to generate problems.
8ff9d697 823
abb0b532 824 -- --
62b68c80 825
62b68c80 826
abb0b532 827Cross-test versions 2001/08/22
62b68c80 828
abb0b532
S
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.
62b68c80 833
abb0b532 834 Run current rsync versions against significant past releases.
3d90ec14 835
abb0b532
S
836 We might need to omit broken old versions, or versions in which
837 particular functionality is broken
a2d2e5c0 838
abb0b532
S
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.
a2d2e5c0 843
abb0b532 844 The new --protocol option may help in this.
a2d2e5c0 845
abb0b532
S
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 -----------------------------------------------------
3d90ec14 922
a577af90 923rsyncsh
46ef7d1d
MP
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.
25ff30e8 930
abb0b532 931 -- --
25ff30e8 932
25ff30e8
MP
933
934http://rsync.samba.org/rsync-and-debian/
935
abb0b532
S
936
937 -- --
938
939
25ff30e8
MP
940rsyncable gzip patch
941
942 Exhaustive, tortuous testing
943
944 Cleanups?
945
abb0b532
S
946 -- --
947
948
25ff30e8
MP
949rsyncsplit as alternative to real integration with gzip?
950
abb0b532
S
951 -- --
952
953
25ff30e8
MP
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.
a577af90 958
abb0b532 959 -- --
a577af90 960