$Id: TODO,v 1.25 2005/05/11 18:42:37 mux Exp $ BUGS: - Correctly handle (un)escaping in tokens as described in the doc/Protocol file of CVSup : \_ -> space, \t -> tab, \n -> newline, \r -> carriage return and \\ -> backslash. For now, the code is *riddled* with strsep() calls, they need to be isolated and replaced with a clean parsing interface that handles escaping. - Cleanup error handling just about everywhere. For now, the code is unable to properly handle failures. This is made complicated due to the multi-threaded design and because the worker threads can block in many different places. We need a way to properly "kill" threads in case of an error, and at least the updater thread needs to be able to recover nicely so that a proper status file is written. We also need the worker threads to return an exist status and possibly an error message. I probably overlooked a few more things. - The stream API needs some polishing. It needs proper error numbers and stream_error() and stream_eof() functions similar to the ferror() and feof() functions. - The yacc/lex code to parse the configuration file is sub-optimal. It has global variables because of yacc, but I think it should be possible to do it better by using YYFUNC_PROTOTYPE or something. I think it should also be possible to completely get rid of the lex file. - Always use absolute pathnames and don't use chdir(). Depending on the threading library, we may not have a current working directory for each thread and it's wrong to rely on it. - Some code uses getpwnam() while it should use the thread-safe variant, getpwnam_r(). Same for getpwuid() and getgrgid(). We probably need a UID/GID lookup cache here. - Add missing support for supfile keywords and add sanity checks for some of them. Also, we're not supposed to choke on unknown keywords to stay in line with CVSup, which just ignores them in order to maintain compatibility with sup configuration files. - If the prefix directory is a symbolic link pointing to a nonexistent file named `SKIP', then we should skip the collection, as described in the CVSup manual page. - Handle some signals (SIGINT, SIGPIPE and maybe others) gracefully, like CVSup does and like we should. MISSING FEATURES: - Parse, use and update status file (ongoing). - Consider computing the MD5 checksum when updating rather than after the diff/checkout is done, it would avoid reading the whole file two times. - Add support for refuse files. - Add support for authentication. - Add support for shell commands sent by the server. - Add missing support for various CVSup options : -A, -k, -l, -1 and -r, -s (requires status file support), -d, -i, -a (requires authentication support), -e and -E (requires shell commands support) and the destDir parameter. - Write a manual page (the CVSup one should probably be reused). - Make the code work on other systems than FreeBSD. OpenBSD and NetBSD support will probably be easy, Linux support will probably require more work. Solaris and Darwin support would also be nice. - Implement some new useful options : the ability to generate CVS checkout files (files in CVS/ subdirectores), a command line override to only update a specific collection and a third verbosity level to display commit log messages. - Add support for CVS mode (maybe?).