home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cvs1929.zip / cvs / src / diffs < prev    next >
Text File  |  1998-08-02  |  156KB  |  4,887 lines

  1. Index: diff/ChangeLog
  2. ===================================================================
  3. RCS file: e:/cvsroot/ccvs/diff/ChangeLog,v
  4. retrieving revision 1.4
  5. retrieving revision 1.2.2.4
  6. diff -c -r1.4 -r1.2.2.4
  7. *** diff/ChangeLog    1998/07/13 15:24:46    1.4
  8. --- diff/ChangeLog    1998/07/16 00:03:40    1.2.2.4
  9. ***************
  10. *** 8,13 ****
  11. --- 8,18 ----
  12.       than printf_output callback.
  13.       * diff3.c (read_diff): Don't set my_callbacks.printf_output.
  14.   
  15. + 1998-06-22  Murray Bishop  <mbishop@acnielsen.com.au>
  16. +     * diff3.c (diff3_run): disconnect stdin from infile after
  17. +     output_diff3_merge.
  18.   Thu Jun 18 12:43:53 1998  Ian Lance Taylor  <ian@cygnus.com>
  19.   
  20.       * diffrun.h: New file.
  21. ***************
  22. *** 46,51 ****
  23. --- 51,61 ----
  24.       * side.c: Likewise.
  25.       * Makefile.in (SOURCES): Add diffrun.h.
  26.       ($(OBJECTS)): Depend upon diffrun.h.
  27. + Fri May 29 13:30:00 1998  Murray Bishop  <mbishop@acnielsen.com.au>
  28. +     * diff.c (compare_files) [__EMX__]: Cope with "nul" file under 
  29. +     OS/2 EMX using the hack from emx port of gnu diffutils.
  30.   
  31.   Fri Jan 16 14:58:19 1998  Larry Jones  <larry.jones@sdrc.com>
  32.   
  33. Index: diff/diff.c
  34. ===================================================================
  35. RCS file: e:/cvsroot/ccvs/diff/diff.c,v
  36. retrieving revision 1.3
  37. retrieving revision 1.2.2.2
  38. diff -c -r1.3 -r1.2.2.2
  39. *** diff/diff.c    1998/06/23 15:31:06    1.3
  40. --- diff/diff.c    1998/06/23 21:04:36    1.2.2.2
  41. ***************
  42. *** 1011,1016 ****
  43. --- 1011,1032 ----
  44.         else
  45.           stat_result = stat (inf[i].name, &inf[i].stat);
  46.   
  47. +       /* EMX bug - we can't stat("nul",&sb),
  48. +        * (but can fd = open("nul",...), fstat(fd,&sb)
  49. +        * - but that doesn't really help us pass death2-diff-2 in sanity.sh
  50. +        * The kludge below is from the emx port of GNU diffutils
  51. +        */
  52. + #ifdef __EMX__
  53. +          /* HACK: Treat 'nul' as a nonexistent file. */
  54. +          if (stat_result != 0 && errno == EINVAL
  55. +       && stricmp (inf[i].name, "nul") == 0)
  56. +         {
  57. +              stat_result = 0;
  58. +              inf[i].desc = -1;
  59. +         }
  60. + #endif /*__EMX__*/
  61.         if (stat_result != 0)
  62.           {
  63.             perror_with_name (inf[i].name);
  64. Index: diff/diff3.c
  65. ===================================================================
  66. RCS file: e:/cvsroot/ccvs/diff/diff3.c,v
  67. retrieving revision 1.4
  68. retrieving revision 1.2.2.3
  69. diff -c -r1.4 -r1.2.2.3
  70. *** diff/diff3.c    1998/07/13 15:24:47    1.4
  71. --- diff/diff3.c    1998/07/16 00:03:40    1.2.2.3
  72. ***************
  73. *** 459,464 ****
  74. --- 459,475 ----
  75.                      tag_strings[0], tag_strings[1], tag_strings[2]);
  76.     else if (merge)
  77.       {
  78. +       /* On Windows-NT 4.0 Service Pack 3, Novell Intranetware Client 4.11a,
  79. +     Microsoft Visual C++ 4.2,
  80. +     not disconnecting stdin from the disk file causes failure to
  81. +     open( , O_CREAT | O_TRUNC ...) windows-NT/filesubr.c(copy_file)
  82. +     in sanity.sh test conflicts-130.
  83. +     (there is no problem with tests on local NTFS disk)
  84. +     
  85. +     work around by using dup */
  86. +       int stdin_save = dup(0);
  87.         if (! freopen (file[rev_mapping[FILE0]], "r", stdin))
  88.       diff3_perror_with_exit (file[rev_mapping[FILE0]]);
  89.         conflicts_found
  90. ***************
  91. *** 466,471 ****
  92. --- 477,489 ----
  93.                     tag_strings[0], tag_strings[1], tag_strings[2]);
  94.         if (ferror (stdin))
  95.       diff3_fatal ("read error");
  96. +       /* close file[rev_mapping[FILE0]], re-connect stdin to where it was
  97. +     before freopen. */
  98. +       dup2( stdin_save, 0 );
  99. +       /* give handle back to os */
  100. +       close( stdin_save );
  101.       }
  102.     else
  103.       {
  104. Index: lib/ChangeLog
  105. ===================================================================
  106. RCS file: e:/cvsroot/ccvs/lib/ChangeLog,v
  107. retrieving revision 1.5
  108. retrieving revision 1.5.2.3
  109. diff -c -r1.5 -r1.5.2.3
  110. *** lib/ChangeLog    1998/05/31 01:12:22    1.5
  111. --- lib/ChangeLog    1998/07/16 00:05:08    1.5.2.3
  112. ***************
  113. *** 1,6 ****
  114. --- 1,24 ----
  115. + 1998-05-31  Andreas Huber  <ahuber@ping.at>
  116. +     * system.h: Added the CVS_CHMOD macro to allow for platform-
  117. +     specific behaviour.
  118. + 1998-05-27  Murray Bishop  <mbishop@acnielsen.com.au>
  119. +     * getdate.y (get_date): Use (Start == -1) rather than (Start < 0)
  120. +     so that Convert failures are detected when time_t is unsigned
  121. +     (as it is on EMX gcc port).
  122.   Tue Mar 24 16:08:00 1998  Ian Lance Taylor  <ian@cygnus.com>
  123.   
  124.       * Makefile.in (CFLAGS): Set to @CFLAGS@, not -g.
  125. + 1998-05-19  Murray Bishop <mbishop@acnielsen.com.au>
  126. +     Murray Bishop applies the Andreas Huber <ahuber.ping.at>
  127. +     patches for cvs-1.9.27
  128. +     
  129. +     * system.h (CVS_CHMOD): Define as chmod if undefined.
  130.   
  131.   1998-02-20  Jim Kingdon  <kingdon@harvey.cyclic.com>
  132.   
  133. Index: lib/getdate.c
  134. ===================================================================
  135. RCS file: e:/cvsroot/ccvs/lib/getdate.c,v
  136. retrieving revision 1.1
  137. retrieving revision 1.1.2.1
  138. diff -c -r1.1 -r1.1.2.1
  139. *** lib/getdate.c    1998/05/31 00:45:18    1.1
  140. --- lib/getdate.c    1998/06/23 21:04:58    1.1.2.1
  141. ***************
  142. *** 991,997 ****
  143.       if (yyHaveDate || yyHaveTime || yyHaveDay) {
  144.       Start = Convert(yyMonth, yyDay, yyYear, yyHour, yyMinutes, yySeconds,
  145.               yyMeridian, yyDSTmode);
  146. !     if (Start < 0)
  147.           return -1;
  148.       }
  149.       else {
  150. --- 991,997 ----
  151.       if (yyHaveDate || yyHaveTime || yyHaveDay) {
  152.       Start = Convert(yyMonth, yyDay, yyYear, yyHour, yyMinutes, yySeconds,
  153.               yyMeridian, yyDSTmode);
  154. !     if (Start == -1)
  155.           return -1;
  156.       }
  157.       else {
  158. Index: lib/getdate.y
  159. ===================================================================
  160. RCS file: e:/cvsroot/ccvs/lib/getdate.y,v
  161. retrieving revision 1.1
  162. retrieving revision 1.1.2.1
  163. diff -c -r1.1 -r1.1.2.1
  164. *** lib/getdate.y    1998/05/31 00:45:18    1.1
  165. --- lib/getdate.y    1998/06/23 21:05:00    1.1.2.1
  166. ***************
  167. *** 977,983 ****
  168.       if (yyHaveDate || yyHaveTime || yyHaveDay) {
  169.       Start = Convert(yyMonth, yyDay, yyYear, yyHour, yyMinutes, yySeconds,
  170.               yyMeridian, yyDSTmode);
  171. !     if (Start < 0)
  172.           return -1;
  173.       }
  174.       else {
  175. --- 977,983 ----
  176.       if (yyHaveDate || yyHaveTime || yyHaveDay) {
  177.       Start = Convert(yyMonth, yyDay, yyYear, yyHour, yyMinutes, yySeconds,
  178.               yyMeridian, yyDSTmode);
  179. !     if (Start == -1)
  180.           return -1;
  181.       }
  182.       else {
  183. Index: lib/system.h
  184. ===================================================================
  185. RCS file: e:/cvsroot/ccvs/lib/system.h,v
  186. retrieving revision 1.4
  187. retrieving revision 1.4.2.1
  188. diff -c -r1.4 -r1.4.2.1
  189. *** lib/system.h    1998/05/31 01:07:33    1.4
  190. --- lib/system.h    1998/05/31 02:10:12    1.4.2.1
  191. ***************
  192. *** 469,474 ****
  193. --- 469,478 ----
  194.   #define CVS_FNMATCH fnmatch
  195.   #endif
  196.   
  197. + #ifndef CVS_CHMOD
  198. + #define CVS_CHMOD chmod
  199. + #endif
  200.   #if defined (__CYGWIN32__) || defined (WIN32)
  201.   
  202.   /* Under Windows NT, filenames are case-insensitive, and both / and \
  203. Index: src/ChangeLog
  204. ===================================================================
  205. RCS file: e:/cvsroot/ccvs/src/ChangeLog,v
  206. retrieving revision 1.13
  207. retrieving revision 1.5.2.17
  208. diff -c -r1.13 -r1.5.2.17
  209. *** src/ChangeLog    1998/07/29 07:12:15    1.13
  210. --- src/ChangeLog    1998/08/01 16:21:05    1.5.2.17
  211. ***************
  212. *** 1,3 ****
  213. --- 1,21 ----
  214. + 1998-08-01  Andreas Huber  <ahuber@ping.at>
  215. +     * server.c: Moved the definition of 'kopt' above receive_file.
  216. +     (receive_file) Check kopt in case Entries is not yet available
  217. +     (e.g. import) to see if the file needs to be opened in binary
  218. +     mode. Corrected a minor style fauxpas.
  219. + 1998-07-31  Andreas Huber  <ahuber@ping.at>
  220. +     * sanity.sh:
  221. +     Don't convert slashes to sloshes for CVS_SERVER. Instead,
  222. +     require that rshd uses a unixy shell to run commands.
  223. +     * sanity.sh:
  224. +     Early detection of OS_COMPILER_EMU so we can add additional flags
  225. +     to the rsh detection if required by the OS (OS/2 needs a -b).
  226. +     CVS_SERVER needs slashes converted to sloshes on some OS's.
  227.   Tue Jul 28 19:33:08 1998  Noel Cragg  <noel@swish.red-bean.com>
  228.   
  229.       * version.c: Change version number to 1.9.29.
  230. ***************
  231. *** 5,10 ****
  232. --- 23,38 ----
  233.       * rcs.c (RCS_checkin): add code to follow symbolic links in the
  234.        repository.
  235.   
  236. + 1998-07-27  Andreas Huber  <ahuber@ping.at>
  237. +     * server.c (dirswitch): Check for an absolute path before trying to
  238. +     create the directory. This is necessary for platforms, where
  239. +     a path may contain a drive specification. It avoids a bogus
  240. +     message for an error that is caught later in server_pathname_check().
  241. +     * client.c (send_a_repository): Use isabsolute() to check update_dir
  242. +     for an absolute path.
  243.   Sun Jul 26 05:14:41 1998  Noel Cragg  <noel@swish.red-bean.com>
  244.   
  245.       * This set of changes reverts the code to pre-1.9.2 behavior and
  246. ***************
  247. *** 72,77 ****
  248. --- 100,127 ----
  249.       * build_src.com (rcscmds.c): Also look for include files in
  250.       [-.diff], just like Ian's 1998-06-18 change to Makefile.in
  251.   
  252. + 1998-07-16  Andreas Huber  <ahuber@ping.at>
  253. +     * sanity.sh:
  254. +     Applied Murray Bishop's <mbishop@acnielsen.com.au> patches.
  255. +     (unedit_without_baserev-4, unedit_without_baserev-14)
  256. +     Replaced "revert changes?" by "revert changes." to make the EMX port
  257. +     of GNU expr from sh-utils 1.12 happy.
  258. +     (unedit_without_baserev-5) Disabled the SunOS4.1.4 test
  259. +     for CVS/Entries corruption.
  260. +     * update.c  (do_update), client.c (get_reponses_and_close),
  261. +     commit.c (commit):
  262. +     Fixed a bug with code that was supposed to avoid time-stamp
  263. +     races but didn't under specific circumstances.
  264. +     * cvs.h: Applied Murray Bishop's <mbishop@acnielsen.com.au> patches.
  265. + 1998-07-15  Andreas Huber  <ahuber@ping.at>
  266. +     * update.c, sanity.sh, commit.c, cvs.h, client.c:
  267. +     Applied Murray Bishop's <mbishop@acnielsen.com.au> patches.
  268.   1998-07-14  Jim Kingdon  <kingdon@harvey.cyclic.com>
  269.   
  270.       * tag.c (pretag_proc), rtag.c (pretag_proc): Don't pass RUN_REALLY
  271. ***************
  272. *** 83,88 ****
  273. --- 133,177 ----
  274.       happen.
  275.       * sanity.sh (taginfo): New tests taginfo-11 to taginfo-13, for this.
  276.   
  277. + 1998-07-13  Andreas Huber  <ahuber@ping.at>
  278. +     * server.c (receive_file):
  279. +     Shut up a warning about variables that might be used
  280. +     uninitialized.
  281. + 1998-07-13  Andreas Huber  <ahuber@ping.at>
  282. +     * sanity.sh: Changed /tmp to ${TMPDIR}.
  283. +     Changed argument parsing to accept drive specifications for
  284. +     the CVS executable.
  285. +     EDHACK_EDITOR is no longer necessary.
  286. +     Added :local: to repository specifications.
  287. +     (editor) Changed to sleep two seconds instead of one to avoid
  288. +     time-stamp races on platforms where the time-stamp resolution
  289. +     is two seconds.
  290. +     * server.c (receive_file):
  291. +     The server writes the files it receives from
  292. +     the client to the temporary directory using the default binary
  293. +     translation mode. While this works on *nix platforms, it certainly
  294. +     doesn't on OS/2. 'Entries' is now searched for a -kb to determine
  295. +     the proper translation mode before creating the file.
  296. +     (server_updated) The server writes the files it is about to send to
  297. +     the client to the temporary directory using the proper translation
  298. +     mode (in RCS_checkout), but reads the file in binary mode. The file
  299. +     is now read in the same mode it was written. finfo->rcs->expand is
  300. +     examined to determine the proper translation mode.
  301. +     * logmsg.c (logfile_write):
  302. +     Changed the quoting character back to `'∩. Quoting
  303. +     is now handled correctly by os2_popen().
  304. +     * client.c (get_responses_and_close), commit.c (commit),
  305. +     update.c (do_update):
  306. +     Changed to sleep two seconds instead of one to avoid time-stamp
  307. +     races. This is required for platforms where the time-stamp
  308. +     resolution is two seconds (e.g. OS/2).
  309.   1998-07-12  Jim Kingdon  <kingdon@harvey.cyclic.com>
  310.   
  311.       * sanity.sh (ann-id): Write the test so that it tests for the
  312. ***************
  313. *** 120,125 ****
  314. --- 209,232 ----
  315.       you version 1.1 of the working file and put 1.2 in CVS/Entries.
  316.       * sanity.sh (unedit-without-baserev): New tests test for this.
  317.   
  318. + 1998-07-07  Murray Bishop  <mbishop@acnielsen.com.au>
  319. +     * sanity.sh: Make local mode mostly runnable on various platforms :
  320. +     - Windows-NT with cygwin32 b19.1
  321. +     - Windows-95 with MKS Toolkit
  322. +     - OS/2 with EMX
  323. +     (and test local mode on Linux too)
  324. +     * cvs.h [FILESYSTEM_TICK]: Define as 1 (second) unless defined.
  325. + 1998-07-06  Murray Bishop  <mbishop@acnielsen.com.au>
  326. +     * client.c(get_responses_and_close): Wait FILESYSTEM_TICK
  327. +     instead of 1 second to avoid time-stamp races.
  328. +     * commit.c(commit): Wait FILESYSTEM_TICK
  329. +     instead of 1 second to avoid time-stamp races.
  330. +     * update.c(do_update): Wait FILESYSTEM_TICK
  331. +     instead of 1 second to avoid time-stamp races.
  332.   1998-07-02  Jim Kingdon  <kingdon@harvey.cyclic.com>
  333.   
  334.       * sanity.sh (unedit-without-baserev): Move the test itself to be
  335. ***************
  336. *** 187,192 ****
  337. --- 294,323 ----
  338.   
  339.       * sanity.sh (modes2): Touch the file before chmod'ing it.
  340.   
  341. + 1998-06-23  Andreas Huber  <ahuber@ping.at>
  342. +     * server.c (mkdir_p): Search for the first occurrence of '/' instead
  343. +     of just skipping the first character. This is required for platforms,
  344. +     where absolute path names do not necessarily start with a '/'.
  345. +     * server.c (serve_root): Added a :local: prefix for platforms, where a
  346. +     path may contain ':'.
  347. +     * server.c (receive_file): Look up the file in Entries first to see if
  348. +     it has a '-kb' option attached to it. Then create the file accordingly.
  349. +     * server.c (server_updated): Look at finfo->rcs->expand first, to see
  350. +     if it includes a '-kb'. If it does, open the file in binary mode. We
  351. +     also need to use buf_read_file_to_eof() and buf_chain_length() now.
  352. +     * logmsg.c (logfile_write): Changed the quoting character from
  353. +     `'∩ to `"∩.
  354. +     * expand_path.c (expand_variable): Replaced CVSroot_original by
  355. +     CVSroot_directory, since former may include the access method.
  356. +     This is for platforms, where paths may contain ':' and a :local:
  357. +     prefix is required.
  358.   1998-06-21  Ian Lance Taylor  <ian@cygnus.com>
  359.   
  360.       * update.c (merge_files): Revert changes of 1998-06-19.  Instead,
  361. ***************
  362. *** 229,234 ****
  363. --- 360,374 ----
  364.       directory.
  365.       (zlib.o): Depend upon zlib.h.
  366.   
  367. + 1998-06-16  Murray Bishop  <mbishop@acnielsen.com.au>
  368. +     * sanity.sh: Modify to run test for windows-NT using cygwin32
  369. +     with compiler MS Visual C++ 4.2.
  370. + 1998-06-12  Murray Bishop  <mbishop@acnielsen.com.au>
  371. +     * sanity.sh: Modify as was run for OS/2 EMX testing.
  372.   1998-06-09  Mike Sutton@SAIC
  373.   
  374.       Make it compile with Sun's bundled K&R C compiler:
  375. ***************
  376. *** 276,287 ****
  377. --- 416,456 ----
  378.   
  379.       * sanity.sh (tag8k): Add a test for the 1998-05-02 rcs.c bug fix.
  380.   
  381. + 1998-05-31  Andreas Huber  <ahuber@ping.at>
  382. +     * client.c, commit.c, filesubr.c, import.c, rcs.c, update.c:
  383. +     Replaced all occurrences of chmod() by CVS_CHMOD().
  384. +     * client.c (start_rsh_server) [START_RSH_WITH_POPEN_RW]:
  385. +     Slightly reordered the arguments to rsh to match the ordering in the
  386. +     !START_RSH_WITH_POPEN_RW case.
  387. +     * client.c (start_rsh_server) [!START_RSH_WITH_POPEN_RW,
  388. +     RSH_NEEDS_BINARY]: Added missing '-b' to the rsh argument list.
  389. +     * filesubr.c: Replaced one occurrence of rename() by CVS_RENAME().
  390. +     * rcs.c, rcs.h: Added two new functions: RCS_get_cached() and
  391. +     RCS_cache_close(). On some platforms, it is not possible to rename()
  392. +     or chmod() open files. The new functions are used to check if a
  393. +     particular file is currently kept open in the RCS cache and to close
  394. +     it, if necessary.
  395. +     * server.c (server) [RSHD_NOT_TRANSPARENT]: On some platforms with a
  396. +     non-tranparent rshd, the standard handles need to be switched to
  397. +     binary mode.
  398.   1998-05-26  Jim Kingdon  <kingdon@harvey.cyclic.com>
  399.   
  400.       * rcs.c (annotate): Call tag_check_valid like the other functions
  401.       which have a -r option.
  402.       * sanity.sh (ann): New test ann-14 tests for this.
  403.   
  404. + 1998-05-25  Murray Bishop  <mbishop@acnielsen.com.au>
  405. +     * commit.c (commit): Open the -F logfile in text rather than
  406. +     binary mode to pass log-11 and keywordlog-7 under OS/2 EMX.
  407.   1998-05-24  Jim Kingdon  <kingdon@harvey.cyclic.com>
  408.   
  409.       * sanity.sh (importc): New tests importc-5 through importc-8 test
  410. ***************
  411. *** 318,323 ****
  412. --- 487,519 ----
  413.       * wrapper.c (wrap_add): Disable -t/-f wrappers at least until the
  414.       serious bug can be fixed.
  415.   
  416. + 1998-05-19  Murray Bishop  <mbishop@acnielsen.com.au>
  417. +     * sanity.sh: Modify to run for OS/2 EMX testing.
  418. +     * commit.c (commit): Open the -F logfile in text rather than
  419. +     binary mode to pass log-11 and keywordlog-7 under OS/2 EMX.
  420. +     * parseinfo.c (parse_config): have fp_info closed before 
  421. +     returning, even if goto error_return happened. Pass config-5.
  422. + 1998-05-19  Murray Bishop <mbishop@acnielsen.com.au>
  423. +     Murray Bishop applies the Andreas Huber <ahuber.ping.at>
  424. +     patches for cvs-1.9.27
  425. +     
  426. +     * client.c (change_mode) [!CHMOD_BROKEN]: Call CVS_CHMOD 
  427. +     instead of chmod.
  428. +     * client.c (start_rsh_server): Move -b flag after hostname.
  429. +     * commit.c (fix_rcs_modes): Use CVS_CHMOD in place of chmod.
  430. +     * filesubr.c (xchmod): Use CVS_CHMOD in place of chmod.
  431. +     * filesubr.c (rename_file): Use CVS_RENAME in place of rename.
  432. +     * import.c (add_rcs_file): Use CVS_CHMOD in place of chmod.
  433. +     * rcs.c (RCS_checkout): Use CVS_CHMOD in place of chmod.
  434. +     * rcs.c (RCS_get_cached): Add function.
  435. +     * rcs.c (RCS_cache_close): Add function.
  436. +     * rcs.h: add prototypes for RCS_get_cached and RCS_cache_close.
  437. +     * server.c (server): Set stdin, stdout, stderr into binary mode.
  438. +     * update.c (patch_file): Use CVS_CHMOD in place of chmod.
  439. +     
  440.   1998-05-15  Jim Kingdon  <kingdon@harvey.cyclic.com>
  441.   
  442.       * checkout.c (checkout): Call server_pathname_check on the
  443. Index: src/client.c
  444. ===================================================================
  445. RCS file: e:/cvsroot/ccvs/src/client.c,v
  446. retrieving revision 1.7
  447. retrieving revision 1.5.2.6
  448. diff -c -r1.7 -r1.5.2.6
  449. *** src/client.c    1998/07/27 10:17:13    1.7
  450. --- src/client.c    1998/07/27 15:26:00    1.5.2.6
  451. ***************
  452. *** 301,307 ****
  453.       mode &= ~oumask;
  454.       }
  455.   
  456. !     if (chmod (filename, mode) < 0)
  457.       return errno;
  458.       return 0;
  459.   #endif /* ! CHMOD_BROKEN */
  460. --- 301,307 ----
  461.       mode &= ~oumask;
  462.       }
  463.   
  464. !     if (CVS_CHMOD (filename, mode) < 0)
  465.       return errno;
  466.       return 0;
  467.   #endif /* ! CHMOD_BROKEN */
  468. ***************
  469. *** 2746,2752 ****
  470.            * sure it matters what toplevel_repos we get, but it does
  471.            * matter that we don't hit the "internal error" code below).
  472.            */
  473. !         if (update_dir[0] == '/')
  474.           toplevel_repos = Name_Repository (update_dir, update_dir);
  475.           else
  476.           {
  477. --- 2746,2752 ----
  478.            * sure it matters what toplevel_repos we get, but it does
  479.            * matter that we don't hit the "internal error" code below).
  480.            */
  481. !         if (isabsolute (update_dir))
  482.           toplevel_repos = Name_Repository (update_dir, update_dir);
  483.           else
  484.           {
  485. ***************
  486. *** 3405,3412 ****
  487.       time_t now;
  488.   
  489.       (void) time (&now);
  490. !     if (now == last_register_time)
  491. !         sleep (1);            /* to avoid time-stamp races */
  492.       }
  493.   
  494.       return errs;
  495. --- 3405,3415 ----
  496.       time_t now;
  497.   
  498.       (void) time (&now);
  499. !     if (now < last_register_time + FILESYSTEM_TICK)
  500. !     {
  501. !         /* to avoid time-stamp races */
  502. !         sleep (last_register_time + FILESYSTEM_TICK - now);
  503. !     }
  504.       }
  505.   
  506.       return errs;
  507. ***************
  508. *** 4439,4444 ****
  509. --- 4442,4448 ----
  510.   
  511.       /* The command line starts out with rsh. */
  512.       rsh_argv[i++] = cvs_rsh;
  513. +     rsh_argv[i++] = CVSroot_hostname;
  514.   
  515.   #ifdef RSH_NEEDS_BINARY_FLAG
  516.       /* "-b" for binary, under OS/2. */
  517. ***************
  518. *** 4452,4458 ****
  519.       rsh_argv[i++] = CVSroot_username;
  520.       }
  521.   
  522. -     rsh_argv[i++] = CVSroot_hostname;
  523.       rsh_argv[i++] = cvs_server;
  524.       rsh_argv[i++] = "server";
  525.   
  526. --- 4456,4461 ----
  527. ***************
  528. *** 4514,4519 ****
  529. --- 4517,4527 ----
  530.   
  531.       *p++ = cvs_rsh;
  532.       *p++ = CVSroot_hostname;
  533. + #ifdef RSH_NEEDS_BINARY_FLAG
  534. +     /* "-b" for binary, under OS/2. */
  535. +     *p++ = "-b";
  536. + #endif /* RSH_NEEDS_BINARY_FLAG */
  537.   
  538.       /* If the login names differ between client and server
  539.        * pass it on to rsh.
  540. Index: src/commit.c
  541. ===================================================================
  542. RCS file: e:/cvsroot/ccvs/src/commit.c,v
  543. retrieving revision 1.5
  544. retrieving revision 1.4.2.5
  545. diff -c -r1.5 -r1.4.2.5
  546. *** src/commit.c    1998/05/31 01:18:38    1.5
  547. --- src/commit.c    1998/07/16 00:33:54    1.4.2.5
  548. ***************
  549. *** 423,430 ****
  550.       if (saved_message)
  551.           error (1, 0, "cannot specify both a message and a log file");
  552.   
  553. !     /* FIXME: Why is this binary?  Needs more investigation.  */
  554. !     if ((logfd = CVS_OPEN (logfile, O_RDONLY | OPEN_BINARY)) < 0)
  555.           error (1, errno, "cannot open log file %s", logfile);
  556.   
  557.       if (fstat(logfd, &statbuf) < 0)
  558. --- 423,434 ----
  559.       if (saved_message)
  560.           error (1, 0, "cannot specify both a message and a log file");
  561.   
  562. !     /* What we have here is the name of file whose contents are
  563. !      * the log message. I guess it's better to open text mode for
  564. !      * those OS where it makes a difference.
  565. !      * (sanity.sh probably works better on EMX OS/2 with text mode)
  566. !      */
  567. !     if ((logfd = CVS_OPEN (logfile, O_RDONLY)) < 0)
  568.           error (1, errno, "cannot open log file %s", logfile);
  569.   
  570.       if (fstat(logfd, &statbuf) < 0)
  571. ***************
  572. *** 673,681 ****
  573.       time_t now;
  574.   
  575.       (void) time (&now);
  576. !     if (now == last_register_time)
  577.       {
  578. !         sleep (1);            /* to avoid time-stamp races */
  579.       }
  580.       }
  581.   
  582. --- 677,686 ----
  583.       time_t now;
  584.   
  585.       (void) time (&now);
  586. !     if (now < last_register_time + FILESYSTEM_TICK)
  587.       {
  588. !         /* to avoid time-stamp races */
  589. !         sleep (last_register_time + FILESYSTEM_TICK - now);
  590.       }
  591.       }
  592.   
  593. ***************
  594. *** 2326,2332 ****
  595.       if (sb.st_mode & S_IXUSR)
  596.       rcs_mode |= S_IXUSR | S_IXGRP | S_IXOTH;
  597.       rcs_mode &= ~cvsumask;
  598. !     if (chmod (rcs, rcs_mode) < 0)
  599.       error (0, errno, "warning: cannot change mode of %s", rcs);
  600.   }
  601.   
  602. --- 2331,2337 ----
  603.       if (sb.st_mode & S_IXUSR)
  604.       rcs_mode |= S_IXUSR | S_IXGRP | S_IXOTH;
  605.       rcs_mode &= ~cvsumask;
  606. !     if (CVS_CHMOD (rcs, rcs_mode) < 0)
  607.       error (0, errno, "warning: cannot change mode of %s", rcs);
  608.   }
  609.   
  610. Index: src/cvs.h
  611. ===================================================================
  612. RCS file: e:/cvsroot/ccvs/src/cvs.h,v
  613. retrieving revision 1.7
  614. retrieving revision 1.5.2.3
  615. diff -c -r1.7 -r1.5.2.3
  616. *** src/cvs.h    1998/07/27 10:17:14    1.7
  617. --- src/cvs.h    1998/07/27 15:26:00    1.5.2.3
  618. ***************
  619. *** 866,868 ****
  620. --- 866,885 ----
  621.   #if defined(SERVER_SUPPORT) || defined(CLIENT_SUPPORT)
  622.   #include "server.h"
  623.   #endif
  624. + /*
  625. +  * In various places, CVS waits a tick of the filesystem clock to make
  626. +  * sure that files have different timestamps. This was coded as sleep (1).
  627. +  * For some filesystems (eg FAT, FAT32) 2 seconds are needed.
  628. +  * I've defined FILESYSTEM_TICK in windows-NT/options.h,
  629. +  * and in src/cvs.h a default of 1 second is defined.
  630. +  *
  631. +  * I'm pretty sure that CVS doesn't do enough waiting, but it's too
  632. +  * hard for me to figure out where to add more.
  633. +  * See sanity.sh [FILESYSTEM_TICK] for more information.
  634. +  */
  635. + #ifndef FILESYSTEM_TICK
  636. + #define FILESYSTEM_TICK 1
  637. + #endif
  638. Index: src/expand_path.c
  639. ===================================================================
  640. RCS file: e:/cvsroot/ccvs/src/expand_path.c,v
  641. retrieving revision 1.1
  642. retrieving revision 1.1.2.1
  643. diff -c -r1.1 -r1.1.2.1
  644. *** src/expand_path.c    1998/05/31 00:45:30    1.1
  645. --- src/expand_path.c    1998/06/23 10:43:18    1.1.2.1
  646. ***************
  647. *** 269,275 ****
  648.       int line;
  649.   {
  650.       if (strcmp (name, CVSROOT_ENV) == 0)
  651. !     return CVSroot_original;
  652.       else if (strcmp (name, "RCSBIN") == 0)
  653.       {
  654.       error (0, 0, "RCSBIN internal variable is no longer supported");
  655. --- 269,275 ----
  656.       int line;
  657.   {
  658.       if (strcmp (name, CVSROOT_ENV) == 0)
  659. !     return CVSroot_directory;
  660.       else if (strcmp (name, "RCSBIN") == 0)
  661.       {
  662.       error (0, 0, "RCSBIN internal variable is no longer supported");
  663. Index: src/filesubr.c
  664. ===================================================================
  665. RCS file: e:/cvsroot/ccvs/src/filesubr.c,v
  666. retrieving revision 1.4
  667. retrieving revision 1.3.2.2
  668. diff -c -r1.4 -r1.3.2.2
  669. *** src/filesubr.c    1998/05/31 01:18:40    1.4
  670. --- src/filesubr.c    1998/06/23 10:28:24    1.3.2.2
  671. ***************
  672. *** 388,394 ****
  673.       if (noexec)
  674.       return;
  675.   
  676. !     if (chmod (fname, mode) < 0)
  677.       error (0, errno, "cannot change mode of file %s", fname);
  678.   }
  679.   
  680. --- 388,394 ----
  681.       if (noexec)
  682.       return;
  683.   
  684. !     if (CVS_CHMOD (fname, mode) < 0)
  685.       error (0, errno, "cannot change mode of file %s", fname);
  686.   }
  687.   
  688. ***************
  689. *** 410,416 ****
  690.       if (noexec)
  691.       return;
  692.   
  693. !     if (rename (from, to) < 0)
  694.       error (1, errno, "cannot rename file %s to %s", from, to);
  695.   }
  696.   
  697. --- 410,416 ----
  698.       if (noexec)
  699.       return;
  700.   
  701. !     if (CVS_RENAME (from, to) < 0)
  702.       error (1, errno, "cannot rename file %s to %s", from, to);
  703.   }
  704.   
  705. Index: src/import.c
  706. ===================================================================
  707. RCS file: e:/cvsroot/ccvs/src/import.c,v
  708. retrieving revision 1.5
  709. retrieving revision 1.5.2.1
  710. diff -c -r1.5 -r1.5.2.1
  711. *** src/import.c    1998/05/31 01:12:48    1.5
  712. --- src/import.c    1998/05/31 02:10:18    1.5.2.1
  713. ***************
  714. *** 1315,1321 ****
  715.           (sb.st_mode & S_IRWXU) >> 6) &
  716.          ~cvsumask &
  717.          ~(S_IWRITE | S_IWGRP | S_IWOTH);
  718. !     if (chmod (rcs, mode) < 0)
  719.       {
  720.       ierrno = errno;
  721.       if (add_logfp != NULL)
  722. --- 1315,1321 ----
  723.           (sb.st_mode & S_IRWXU) >> 6) &
  724.          ~cvsumask &
  725.          ~(S_IWRITE | S_IWGRP | S_IWOTH);
  726. !     if (CVS_CHMOD (rcs, mode) < 0)
  727.       {
  728.       ierrno = errno;
  729.       if (add_logfp != NULL)
  730. Index: src/parseinfo.c
  731. ===================================================================
  732. RCS file: e:/cvsroot/ccvs/src/parseinfo.c,v
  733. retrieving revision 1.3
  734. retrieving revision 1.2.2.2
  735. diff -c -r1.3 -r1.2.2.2
  736. *** src/parseinfo.c    1998/07/27 10:17:14    1.3
  737. --- src/parseinfo.c    1998/07/27 15:26:01    1.2.2.2
  738. ***************
  739. *** 205,211 ****
  740.       char *cvsroot;
  741.   {
  742.       char *infopath;
  743. !     FILE *fp_info;
  744.       char *line = NULL;
  745.       size_t line_allocated = 0;
  746.       size_t len;
  747. --- 205,211 ----
  748.       char *cvsroot;
  749.   {
  750.       char *infopath;
  751. !     FILE *fp_info = NULL; /* look like fopen failed */
  752.       char *line = NULL;
  753.       size_t line_allocated = 0;
  754.       size_t len;
  755. ***************
  756. *** 392,397 ****
  757. --- 392,401 ----
  758.       return 0;
  759.   
  760.    error_return:
  761. +     if (fp_info != NULL)
  762. +        {
  763. +        fclose( fp_info );
  764. +        }
  765.       if (infopath != NULL)
  766.       free (infopath);
  767.       if (line != NULL)
  768. Index: src/rcs.c
  769. ===================================================================
  770. RCS file: e:/cvsroot/ccvs/src/rcs.c,v
  771. retrieving revision 1.11
  772. retrieving revision 1.5.2.7
  773. diff -c -r1.11 -r1.5.2.7
  774. *** src/rcs.c    1998/07/29 07:12:16    1.11
  775. --- src/rcs.c    1998/07/29 11:54:34    1.5.2.7
  776. ***************
  777. *** 4630,4636 ****
  778.                  workfile);
  779.       }
  780.   
  781. !     ret = chmod (workfile,
  782.                change_rcs_mode
  783.                ? rcs_mode
  784.                : sb.st_mode & ~(S_IWRITE | S_IWGRP | S_IWOTH));
  785. --- 4630,4636 ----
  786.                  workfile);
  787.       }
  788.   
  789. !     ret = CVS_CHMOD (workfile,
  790.                change_rcs_mode
  791.                ? rcs_mode
  792.                : sb.st_mode & ~(S_IWRITE | S_IWGRP | S_IWOTH));
  793. ***************
  794. *** 4641,4647 ****
  795.           return 1;
  796.       }
  797.   
  798. !     ret = chmod (workfile,
  799.                sb.st_mode & ~(S_IWRITE | S_IWGRP | S_IWOTH));
  800.   #endif
  801.       if (ret < 0)
  802. --- 4641,4647 ----
  803.           return 1;
  804.       }
  805.   
  806. !     ret = CVS_CHMOD (workfile,
  807.                sb.st_mode & ~(S_IWRITE | S_IWGRP | S_IWOTH));
  808.   #endif
  809.       if (ret < 0)
  810. ***************
  811. *** 8656,8658 ****
  812. --- 8656,8670 ----
  813.       return label;
  814.   }
  815.   
  816. + FILE* RCS_get_cached (name)
  817. +     const char* name;
  818. + {
  819. +     return cached_rcs != NULL &&
  820. +         strcmp (cached_rcs->path, name) == 0 ?
  821. +         cached_rcsbuf.fp : NULL;
  822. + }
  823. + void RCS_cache_close ()
  824. + {
  825. +     rcsbuf_cache_close ();
  826. + }
  827. Index: src/rcs.h
  828. ===================================================================
  829. RCS file: e:/cvsroot/ccvs/src/rcs.h,v
  830. retrieving revision 1.3
  831. retrieving revision 1.3.2.1
  832. diff -c -r1.3 -r1.3.2.1
  833. *** src/rcs.h    1998/05/31 01:12:54    1.3
  834. --- src/rcs.h    1998/05/31 02:10:22    1.3.2.1
  835. ***************
  836. *** 236,238 ****
  837. --- 236,241 ----
  838.   extern int add_rcs_file PROTO ((char *, char *, char *, char *, char *,
  839.                   char *, char *, int, char **,
  840.                   char *, size_t, FILE *));
  841. + FILE* RCS_get_cached PROTO ((const char *));
  842. + void RCS_cache_close PROTO ((void));
  843. Index: src/sanity.sh
  844. ===================================================================
  845. RCS file: e:/cvsroot/ccvs/src/sanity.sh,v
  846. retrieving revision 1.12
  847. retrieving revision 1.5.2.13
  848. diff -c -r1.12 -r1.5.2.13
  849. *** src/sanity.sh    1998/07/27 10:17:16    1.12
  850. --- src/sanity.sh    1998/07/31 15:09:31    1.5.2.13
  851. ***************
  852. *** 43,52 ****
  853.   # required to make this script work properly.
  854.   unset CVSREAD
  855.   
  856. ! # The default value of /tmp/cvs-sanity for TESTDIR is dubious,
  857.   # because it loses if two people/scripts try to run the tests
  858.   # at the same time.  Some possible solutions:
  859. ! # 1.  Use /tmp/cvs-test$$.  One disadvantage is that the old
  860.   #     cvs-test* directories would pile up, because they wouldn't
  861.   #     necessarily get removed.
  862.   # 2.  Have everyone/everything running the testsuite set
  863. --- 43,52 ----
  864.   # required to make this script work properly.
  865.   unset CVSREAD
  866.   
  867. ! # The default value of ${TMPDIR}/cvs-sanity for TESTDIR is dubious,
  868.   # because it loses if two people/scripts try to run the tests
  869.   # at the same time.  Some possible solutions:
  870. ! # 1.  Use ${TMPDIR}/cvs-test$$.  One disadvantage is that the old
  871.   #     cvs-test* directories would pile up, because they wouldn't
  872.   #     necessarily get removed.
  873.   # 2.  Have everyone/everything running the testsuite set
  874. ***************
  875. *** 59,77 ****
  876.   #     So this would be lost if everything was `pwd`-based.  I suppose
  877.   #     if we wanted to get baroque we could start making symlinks
  878.   #     to ensure the two are different.
  879. ! TESTDIR=${TESTDIR:-/tmp/cvs-sanity}
  880.   
  881.   # "debugger"
  882.   #set -x
  883.   
  884.   echo 'This test should produce no other output than this line, and a final "OK".'
  885.   
  886.   if test x"$1" = x"-r"; then
  887.       shift
  888.       remote=yes
  889.       # If we're going to do remote testing, make sure 'rsh' works first.
  890.           host="`hostname`"
  891. !     if test "x`${CVS_RSH-rsh} $host -n 'echo hi'`" != "xhi"; then
  892.           echo "ERROR: cannot test remote CVS, because \`rsh $host' fails." >&2
  893.           exit 1
  894.       fi
  895. --- 59,93 ----
  896.   #     So this would be lost if everything was `pwd`-based.  I suppose
  897.   #     if we wanted to get baroque we could start making symlinks
  898.   #     to ensure the two are different.
  899. ! TESTDIR=${TESTDIR:-${TMPDIR}/cvs-sanity}
  900.   
  901.   # "debugger"
  902.   #set -x
  903.   
  904.   echo 'This test should produce no other output than this line, and a final "OK".'
  905.   
  906. + # FIXME: The detection of OS_COMPILER_EMU only tests for OS.
  907. + # Is there some way to tell what compiled cvs? If so, then things
  908. + # like cygwin32 compiled cvs might be handled.
  909. + OS_COMPILER_EMU=""
  910. + if test x"${OS2_SHELL}" != x; then
  911. +   OS_COMPILER_EMU="os2_gcc_emx"
  912. +   RSH_FLAGS="-b"
  913. + fi
  914. + if test x"${OS}" = x"Windows_NT"; then
  915. +   OS_COMPILER_EMU="win32_msvc_cygwin32"
  916. + fi
  917. + if test "x`uname`" = "xWindows_95"; then
  918. +   OS_COMPILER_EMU="win95_msvc_mks"
  919. + fi
  920. +   
  921.   if test x"$1" = x"-r"; then
  922.       shift
  923.       remote=yes
  924.       # If we're going to do remote testing, make sure 'rsh' works first.
  925.           host="`hostname`"
  926. !     if test "x`${CVS_RSH-rsh} $host $RSH_FLAGS -n 'echo hi'`" != "xhi"; then
  927.           echo "ERROR: cannot test remote CVS, because \`rsh $host' fails." >&2
  928.           exit 1
  929.       fi
  930. ***************
  931. *** 80,86 ****
  932.   fi
  933.   
  934.   # The --keep option will eventually cause all the tests to leave around the
  935. ! # contents of the /tmp directory; right now only some implement it.  Not
  936.   # useful if you are running more than one test.
  937.   # FIXME: need some real option parsing so this doesn't depend on the order
  938.   # in which they are specified.
  939. --- 96,102 ----
  940.   fi
  941.   
  942.   # The --keep option will eventually cause all the tests to leave around the
  943. ! # contents of the ${TMPDIR} directory; right now only some implement it.  Not
  944.   # useful if you are running more than one test.
  945.   # FIXME: need some real option parsing so this doesn't depend on the order
  946.   # in which they are specified.
  947. ***************
  948. *** 94,100 ****
  949.   # Use full path for CVS executable, so that CVS_SERVER gets set properly
  950.   # for remote.
  951.   case $1 in
  952. ! /*)
  953.       testcvs=$1
  954.       ;;
  955.   *)
  956. --- 110,116 ----
  957.   # Use full path for CVS executable, so that CVS_SERVER gets set properly
  958.   # for remote.
  959.   case $1 in
  960. ! /*|[a-zA-Z]:/*)
  961.       testcvs=$1
  962.       ;;
  963.   *)
  964. ***************
  965. *** 129,134 ****
  966. --- 145,324 ----
  967.     fi
  968.   fi
  969.   
  970. + # Here are a bunch of things that let sanity.sh run better on EMX
  971. + # and on windows-NT.
  972. + case $OS_COMPILER_EMU in
  973. +   os2_gcc_emx)
  974. +     echo "Bending sanity.sh for ${OS_COMPILER_EMU}"
  975. +     # Regexp to match the name of a temporary file (from cvs_temp_name).
  976. +     # redefine to allow colon
  977. +     tempname="[-a-zA-Z0-9/.%_:]*"
  978. +     # when asked `type -p sh`, pd korn shell for OS/2 5.27 says 
  979. +     # "sh is a tracked alias for d:\gnu\bin/sh.exe"
  980. +     TESTSHELL=sh
  981. +     # On OS/2 and Windows-NT, we can't make directories readonly with 
  982. +     # chmod -w
  983. +     # When the line below is uncommented, test needing that are not run
  984. +     CANT_PROTECT_DIRS=1
  985. +     # On OS/2 and Windows-NT, sometimes we can't run shell scripts by 
  986. +     # naming them.
  987. +     # When the line below is uncommented, hack around such problems
  988. +     # Andreas Huber says when he is finished his port of 1.9.28.1
  989. +     # scripts will run ok.
  990. +     CANT_RUN_SCRIPTS=1
  991. +     # On OS/2 with EMX, invoke edhack.exe instead of a shell script editme
  992. +     # You'll need edhack.exe on your path for this one
  993. +     # You can find a copy below in this file (look for edhack.c)
  994. +     #EDHACK_EDITOR=1
  995. +     # On OS/2 and Win-NT do tests for PreservePermissions only if asked
  996. +     # (that way, default sanity.sh run is easy)
  997. +     WONT_PRESERVE_PERMISSIONS=1
  998. +     # OS/2 (EMX) ls - GNU file utilities 3.13 shows things like drwxa--
  999. +     # rather than -r--r--r--. this breaks most of modes) test, so don't
  1000. +     # do it unless asked.
  1001. +     BROKEN_LS_L=1
  1002. +     # DEVNULL is used for expr comparison (like macro in src/cvs.h 
  1003. +     # (/dev/null) and also in windows-NT/config.h (nul) for 
  1004. +     # OS/2 emx gcc and Windows-NT MSVC++ want nul
  1005. +     DEVNULL=nul
  1006. +     DEVNULL_TIME="[a-zA-Z0-9: ]*"
  1007. +     # OS/2 EMX and cygwin32 have cat and echo emit lines with crlf at end
  1008. +     # This is no good for For making RCS files, so the kludge crlf2lf.exe
  1009. +     # can be used instead (you'll need it on your path)
  1010. +     # You can find a copy below in this file (look for crlf2lf.c)
  1011. +     CRLF_ENDLINES=1
  1012. +     SLASH="/"
  1013. +   ;;
  1014. +   win32_msvc_cygwin32)
  1015. +     echo "Bending sanity.sh for ${OS_COMPILER_EMU}"
  1016. +     tempname="[-a-zA-Z0-9/\\.%_:]*"
  1017. +     # reserved-13b works like this
  1018. +     TESTSHELL=sh
  1019. +     CANT_PROTECT_DIRS=1
  1020. +     CANT_RUN_SCRIPTS=1
  1021. +     EDHACK_EDITOR=1
  1022. +     WONT_PRESERVE_PERMISSIONS=1
  1023. +     # FIXME: cygwyn32 is a lot less broken than emx, and may possibly
  1024. +     # be made to work. 
  1025. +         # For instance, emx fails at modes-5, but nt fails at modes-7b
  1026. +     # when the BROKEN_LS_L isn't defined.
  1027. +     # On the other hand, maybe cygwin32 not passing modes) is a real bug.
  1028. +     BROKEN_LS_L=1
  1029. +     DEVNULL=nul
  1030. +     CRLF_ENDLINES=1
  1031. +     # Some RCS outputs have \ rather than / on windows-NT when
  1032. +     # compiled by MS Visual C++
  1033. +       SLASH="[/\\]"
  1034. +     # death2-diff tests give ? as filetime of nul
  1035. +     DEVNULL_TIME="?"
  1036. +   ;;
  1037. +   win95_msvc_mks)
  1038. +     echo "Bending sanity.sh for ${OS_COMPILER_EMU}"
  1039. +     tempname="[-a-zA-Z0-9/\\.%_:]*"
  1040. +     # MKS ksh seems to run DOS type rather than *nix type, so
  1041. +     # shell detection just doesn't work.
  1042. +     TESTSHELL=sh
  1043. +     CANT_PROTECT_DIRS=1
  1044. +     CANT_RUN_SCRIPTS=1
  1045. +     EDHACK_EDITOR=1
  1046. +     WONT_PRESERVE_PERMISSIONS=1
  1047. +     # FIXME: cygwyn32 is a lot less broken than emx, and may possibly
  1048. +     # be made to work. 
  1049. +         # For instance, emx fails at modes-5, but nt fails at modes-7b
  1050. +     # when the BROKEN_LS_L isn't defined.
  1051. +     # On the other hand, maybe cygwin32 not passing modes) is a real bug.
  1052. +     BROKEN_LS_L=1
  1053. +     DEVNULL=nul
  1054. +     CRLF_ENDLINES=1
  1055. +     # Some RCS outputs have \ rather than / on windows-NT when
  1056. +     # compiled by MS Visual C++
  1057. +       SLASH="[/\\]"
  1058. +     # death2-diff tests give ? as filetime of nul
  1059. +     DEVNULL_TIME="?"
  1060. +      DEVNULL_TIME="[a-zA-Z0-9: ]*"
  1061. +   ;;
  1062. +   *)
  1063. +     DEVNULL=/dev/null
  1064. +     SLASH="/"
  1065. +     DEVNULL_TIME="[a-zA-Z0-9: ]*"
  1066. +     FILESYSTEM_TICK=0
  1067. +   ;;
  1068. + esac
  1069. + # here is a hack that converts files with cr lf end lines to lf endlines
  1070. + lf_endlines ()
  1071. + {
  1072. +   if test x"${CRLF_ENDLINES}" = x; then
  1073. +     return 0
  1074. +   fi
  1075. +   crlf2lf <$1 ${TMPDIR}/lf$$
  1076. +   cp ${TMPDIR}/lf$$ $1
  1077. +   rm -f ${TMPDIR}/lf$$
  1078. +   return 0
  1079. + }
  1080. + # /* crlf2lf.c */
  1081. + # #include <stdio.h>
  1082. + # 
  1083. + # int Usage( const char * pszPgmname )
  1084. + # {
  1085. + #    fprintf( stdout, "Usage: %s OUTFILE\n", pszPgmname );
  1086. + #    fprintf( stdout,
  1087. + #       "\n"
  1088. + #       "Copy stdin to OUTFILE replacing crlf by lf.\n");
  1089. + #    return 1;
  1090. + # }
  1091. + # 
  1092. + # int main(int argc, const char * argv[])
  1093. + # {
  1094. + #    FILE *         pOutFile;
  1095. + #    int i;
  1096. + # 
  1097. + #    if (argc != 2)
  1098. + #       {
  1099. + #       return Usage(argv[0]);
  1100. + #       }
  1101. + #    pOutFile = fopen( argv[1], "wb");
  1102. + #    if (0 == pOutFile)
  1103. + #       {
  1104. + #       printf("Can't open %s for writing\n", argv[1]);
  1105. + #       return Usage(argv[0]);
  1106. + #       }
  1107. + # 
  1108. + #    while (EOF != (i= getc(stdin)))
  1109. + #       putc(i, pOutFile);
  1110. + #    return 0;
  1111. + # 
  1112. + #    fflush( pOutFile );
  1113. + # }
  1114.   # FIXME: try things (what things? checkins?) without -m.
  1115.   #
  1116.   # Some of these tests are written to expect -Q.  But testing with
  1117. ***************
  1118. *** 528,539 ****
  1119.   # likely that we test whether CVS is distinguishing between TMPPWD
  1120.   # and TESTDIR.  However, there is no guarantee that will test it anyway.
  1121.   # If we really care, we should do something along the lines of:
  1122. ! #   cd /tmp/cvs-sanity  # In reality, overridable with environment variable?
  1123.   #   mkdir realdir
  1124.   #   ln -s realdir testdir
  1125. ! #   TESTDIR=/tmp/cvs-sanity/testdir
  1126. ! #   TMPPWD=/tmp/cvs-sanity/realdir
  1127. ! TMPPWD=`pwd`
  1128.   
  1129.   # Avoid picking up any stray .cvsrc, etc., from the user running the tests
  1130.   mkdir home
  1131. --- 718,823 ----
  1132.   # likely that we test whether CVS is distinguishing between TMPPWD
  1133.   # and TESTDIR.  However, there is no guarantee that will test it anyway.
  1134.   # If we really care, we should do something along the lines of:
  1135. ! #   cd ${TMPDIR}/cvs-sanity  # In reality, overridable with environment variable?
  1136.   #   mkdir realdir
  1137.   #   ln -s realdir testdir
  1138. ! #   TESTDIR=${TMPDIR}/cvs-sanity/testdir
  1139. ! #   TMPPWD=${TMPDIR}/cvs-sanity/realdir
  1140. ! # allow overide of TMPPWD from outside sanity.sh
  1141. ! if test x"${TMPPWD}" = x; then
  1142. !   if test x"${SLASH}" = x"/"; then
  1143. !     TMPPWD=`pwd`
  1144. !   else
  1145. !     if test x"${TESTDIR}" = x"/tmp/cvs-sanity"; then
  1146. !       # but here's a hack that makes basic2-64 happier with winnt, MS Visual C++ 4.0
  1147. !       # and cygwin32 beta19 bash by accepting optional drive letter and slosh
  1148. !       # instead of slash
  1149. !       TMPPWD=[A-Za-z:]*${SLASH}tmp${SLASH}cvs-sanity
  1150. !     else
  1151. !       echo '${SLASH} != / and ${TESTDIR} != /tmp/cvs-sanity. TMPPWD will be wrongly set'
  1152. !     fi
  1153. !   fi
  1154. ! fi
  1155. ! # In various places, CVS waits a tick of the filesystem clock to make
  1156. ! # sure that files have different timestamps. This was coded as sleep (1).
  1157. ! # For some filesystems (eg FAT, FAT32) 2 seconds are needed.
  1158. ! # In my local cvs, I've defined FILESYSTEM_TICK in windows-NT/options.h,
  1159. ! # and in src/cvs.h a default of 1 second is defined.
  1160. ! #
  1161. ! # I found some timing problems using sanity.sh Windows-95 on Pentium 90
  1162. ! # with MKS Toolkit and FAT. These are worse on Pentium-II 333.
  1163. ! # On the other hand, I didn't see these problems withPentium 133 NT and
  1164. ! # cygwin32 on a netware 4.10 server for which the script below reports
  1165. ! # 2 seconds per filesystem tick.
  1166. ! # Nor did I see these problems with OS/2 HPFS using EMX port.
  1167. ! #
  1168. ! # Perhaps part of the problem is not 
  1169. ! #
  1170. ! # I suspect that CVS doesn't sleep in enough places for this to work 
  1171. ! # properly.
  1172. ! #
  1173. ! # multibranch2 often fails, as does the second ci here :
  1174. ! #   cvs add file1
  1175. ! #   cvs ci
  1176. ! #   echo foo >file1
  1177. ! #   cvs ci
  1178. ! #
  1179. ! # Windows_95 on Pentium 90 using FAT I found that I had about 18 mostly
  1180. ! # consistent failures where sanity.sh expected a file just modified
  1181. ! # in the sandbox to be checked in and cvs didn't do that.
  1182. ! # When I ran on Pentium-II 333 (FAT32) I got about 30.
  1183. ! # Eventually, I tried putting sleep before the echo command modifying
  1184. ! # the file - problem gone.
  1185. ! # I'm told FAT doesn't keep the low order bit of time in seconds.
  1186. ! #
  1187. ! # The code below works out the number of seconds (>=0) to wait between
  1188. ! # creating files to be sure that they have different timestamps.
  1189. ! # I've put sleeps where they seem to be needed (before
  1190. ! # echo cat or cp before ci modified, 
  1191. ! # before update -r,
  1192. ! # before tag -b branch)
  1193. ! #
  1194. ! # Having different timestamps on fileX and in CVS/Entries for fileX is
  1195. ! # how cvs decides file is modified since checkout. Detection would be
  1196. ! # more robust if bytesize was also compared. 
  1197. ! # Would changing the Entries file be a bad thing?
  1198. ! #
  1199. ! # Murray Bishop, 1 July 98
  1200. ! if test "x${FILESYSTEM_TICK}" = "x"; then
  1201. !   seconds=0
  1202. !   while test "x${FILESYSTEM_TICK}" = "x"; do
  1203. !     echo tock >tick1
  1204. !     sleep ${seconds}
  1205. !     echo tock >tick2
  1206. !     sleep ${seconds}
  1207. !     echo tock >tick3
  1208. !     sleep ${seconds}
  1209. !     echo tock >tick4
  1210. !     sleep ${seconds}
  1211. !     echo tock >tick5
  1212. !     if test  tick1 -ot tick2 \
  1213. !     -a tick2 -ot tick3 \
  1214. !     -a tick3 -ot tick4 \
  1215. !     -a tick4 -ot tick5; then
  1216. !       FILESYSTEM_TICK=${seconds}
  1217. !     fi
  1218. !     seconds=`expr ${seconds} + 1`
  1219. !   done
  1220. !   rm tick1 tick2 tick3 tick4 tick5
  1221. ! fi
  1222. ! if test "x${FILESYSTEM_TICK}" != "x0"; then
  1223. !   : When we depart from distribution behavior - say so.
  1224. !   echo "Waiting ${FILESYSTEM_TICK} seconds between creating files gives different modified times."
  1225. ! fi
  1226.   
  1227.   # Avoid picking up any stray .cvsrc, etc., from the user running the tests
  1228.   mkdir home
  1229. ***************
  1230. *** 571,579 ****
  1231.       tests="${tests} binwrap3 mwrap info taginfo config"
  1232.       tests="${tests} serverpatch log log2 ann ann-id crerepos rcs rcs2"
  1233.       tests="${tests} history"
  1234. !     tests="${tests} big modes modes2 stamps"
  1235. !     # PreservePermissions stuff: permissions, symlinks et al.
  1236. !     tests="${tests} perms symlinks hardlinks"
  1237.       # More tag and branch tests, keywords.
  1238.       tests="${tests} sticky keyword keywordlog"
  1239.       tests="${tests} head tagdate multibranch2 tag8k"
  1240. --- 855,873 ----
  1241.       tests="${tests} binwrap3 mwrap info taginfo config"
  1242.       tests="${tests} serverpatch log log2 ann ann-id crerepos rcs rcs2"
  1243.       tests="${tests} history"
  1244. !     tests="${tests} big"
  1245. !     if test x"${BROKEN_LS_L}" = x; then
  1246. !       tests="${tests} modes modes2"
  1247. !     else
  1248. !       echo "Won't run modes modes2 tests - BROKEN_LS_L"
  1249. !     fi
  1250. !     tests="${tests} stamps"
  1251. !     if test x"${WONT_PRESERVE_PERMISSIONS}" = x; then
  1252. !       # PreservePermissions stuff: permissions, symlinks et al.
  1253. !       tests="${tests} perms symlinks hardlinks"
  1254. !     else
  1255. !       echo "Won't run perms symlinks hardlinks tests - WONT_PRESERVE_PERMISSIONS"
  1256. !     fi
  1257.       # More tag and branch tests, keywords.
  1258.       tests="${tests} sticky keyword keywordlog"
  1259.       tests="${tests} head tagdate multibranch2 tag8k"
  1260. ***************
  1261. *** 598,611 ****
  1262.       ISDIFF=false
  1263.   
  1264.       cd $DIR_1
  1265. !     find . -print | fgrep -v /CVS | sort > /tmp/dc$$d1
  1266.   
  1267.       # go back where we were to avoid symlink hell...
  1268.       cd $OLDPWD
  1269.       cd $DIR_2
  1270. !     find . -print | fgrep -v /CVS | sort > /tmp/dc$$d2
  1271.   
  1272. !     if diff /tmp/dc$$d1 /tmp/dc$$d2 >/dev/null 2>&1
  1273.       then
  1274.           :
  1275.       else
  1276. --- 892,906 ----
  1277.       ISDIFF=false
  1278.   
  1279.       cd $DIR_1
  1280. !     # EMX gnu find 4.1 emits CVS rather than ./CVS
  1281. !     find . -print | fgrep -v CVS | sort > ${TMPDIR}/dc$$d1
  1282.   
  1283.       # go back where we were to avoid symlink hell...
  1284.       cd $OLDPWD
  1285.       cd $DIR_2
  1286. !     find . -print | fgrep -v CVS | sort > ${TMPDIR}/dc$$d2
  1287.   
  1288. !     if diff ${TMPDIR}/dc$$d1 ${TMPDIR}/dc$$d2 >/dev/null 2>&1
  1289.       then
  1290.           :
  1291.       else
  1292. ***************
  1293. *** 621,633 ****
  1294.                   ISDIFF=true
  1295.               fi
  1296.           fi
  1297. !     done < /tmp/dc$$d1
  1298. !     rm -f /tmp/dc$$*
  1299.   }
  1300.   
  1301.   # Set up CVSROOT (the crerepos tests will test operating without CVSROOT set).
  1302.   CVSROOT_DIRNAME=${TESTDIR}/cvsroot
  1303. ! CVSROOT=${CVSROOT_DIRNAME} ; export CVSROOT
  1304.   if test "x$remote" = xyes; then
  1305.       # Use rsh so we can test it without having to muck with inetd
  1306.       # or anything like that.  Also needed to get CVS_SERVER to
  1307. --- 916,928 ----
  1308.                   ISDIFF=true
  1309.               fi
  1310.           fi
  1311. !     done < ${TMPDIR}/dc$$d1
  1312. !     rm -f ${TMPDIR}/dc$$*
  1313.   }
  1314.   
  1315.   # Set up CVSROOT (the crerepos tests will test operating without CVSROOT set).
  1316.   CVSROOT_DIRNAME=${TESTDIR}/cvsroot
  1317. ! CVSROOT=:local:${CVSROOT_DIRNAME} ; export CVSROOT
  1318.   if test "x$remote" = xyes; then
  1319.       # Use rsh so we can test it without having to muck with inetd
  1320.       # or anything like that.  Also needed to get CVS_SERVER to
  1321. ***************
  1322. *** 787,796 ****
  1323.         # The .* here will normally be "No such file or directory",
  1324.         # but if memory serves some systems (AIX?) have a different message.
  1325.   :      dotest_fail basica-9 \
  1326. !         "${testcvs} -q -d ${TESTDIR}/nonexist update" \
  1327.   "${PROG}: cannot access cvs root ${TESTDIR}/nonexist: .*"
  1328.         dotest_fail basica-9 \
  1329. !         "${testcvs} -q -d ${TESTDIR}/nonexist update" \
  1330.   "${PROG} \[[a-z]* aborted\]: ${TESTDIR}/nonexist/CVSROOT: .*"
  1331.   
  1332.         dotest basica-10 "${testcvs} annotate" \
  1333. --- 1082,1091 ----
  1334.         # The .* here will normally be "No such file or directory",
  1335.         # but if memory serves some systems (AIX?) have a different message.
  1336.   :      dotest_fail basica-9 \
  1337. !         "${testcvs} -q -d :local:${TESTDIR}/nonexist update" \
  1338.   "${PROG}: cannot access cvs root ${TESTDIR}/nonexist: .*"
  1339.         dotest_fail basica-9 \
  1340. !         "${testcvs} -q -d :local:${TESTDIR}/nonexist update" \
  1341.   "${PROG} \[[a-z]* aborted\]: ${TESTDIR}/nonexist/CVSROOT: .*"
  1342.   
  1343.         dotest basica-10 "${testcvs} annotate" \
  1344. ***************
  1345. *** 972,977 ****
  1346. --- 1267,1273 ----
  1347.   ${TESTDIR}/cvsroot/first-dir/sdir2/sfile2,v  <--  sfile2
  1348.   initial revision: 1\.1
  1349.   done"
  1350. +       sleep ${FILESYSTEM_TICK}
  1351.         echo sfile1 develops >Emptydir/sfile1
  1352.         dotest basicb-6 "${testcvs} -q ci -m modify" \
  1353.   "Checking in Emptydir/sfile1;
  1354. ***************
  1355. *** 1755,1760 ****
  1356. --- 2051,2057 ----
  1357.               cd $i
  1358.   
  1359.               # modify a file
  1360. +             sleep ${FILESYSTEM_TICK}
  1361.               echo file6 >>file6
  1362.   
  1363.               # delete a file
  1364. ***************
  1365. *** 1895,1901 ****
  1366.           fi
  1367.   
  1368.           # directory copies are done in an oblique way in order to avoid a bug in sun's tmp filesystem.
  1369. !         mkdir first-dir.cpy ; (cd first-dir ; tar cf - . | (cd ../first-dir.cpy ; tar xf -))
  1370.   
  1371.           directory_cmp first-dir export-dir
  1372.   
  1373. --- 2192,2209 ----
  1374.           fi
  1375.   
  1376.           # directory copies are done in an oblique way in order to avoid a bug in sun's tmp filesystem.
  1377. !         if test "x${OS_COMPILER_EMU}" = "xwin95_msvc_mks"; then
  1378. !           # MKS Toolkit on win95 sometimes chokes on the usual way
  1379. !           mkdir first-dir.cpy
  1380. !           cd first-dir
  1381. !           tar cf ${TESTDIR}/ball.tar .
  1382. !           cd ../first-dir.cpy
  1383. !           tar xf ${TESTDIR}/ball.tar
  1384. !           rm ${TESTDIR}/ball.tar
  1385. !           cd ..
  1386. !         else
  1387. !          mkdir first-dir.cpy ; (cd first-dir ; tar cf - . | (cd ../first-dir.cpy ; tar xf -))
  1388. !         fi
  1389.   
  1390.           directory_cmp first-dir export-dir
  1391.   
  1392. ***************
  1393. *** 1943,1949 ****
  1394.   
  1395.           rm -r export-dir first-dir
  1396.           mkdir first-dir
  1397. !         (cd first-dir.cpy ; tar cf - . | (cd ../first-dir ; tar xf -))
  1398.   
  1399.           # update the top, cancelling sticky tags, retag, update other copy, compare.
  1400.           cd first-dir
  1401. --- 2251,2267 ----
  1402.   
  1403.           rm -r export-dir first-dir
  1404.           mkdir first-dir
  1405. !         if test "x${OS_COMPILER_EMU}" = "xwin95_msvc_mks"; then
  1406. !           # MKS Toolkit on win95 sometimes chokes on the usual way
  1407. !           cd first-dir.cpy
  1408. !           tar cf ${TESTDIR}/ball.tar .
  1409. !           cd ../first-dir
  1410. !           tar xf ${TESTDIR}/ball.tar
  1411. !           rm ${TESTDIR}/ball.tar
  1412. !           cd ..
  1413. !         else
  1414. !           (cd first-dir.cpy ; tar cf - . | (cd ../first-dir ; tar xf -))
  1415. !         fi
  1416.   
  1417.           # update the top, cancelling sticky tags, retag, update other copy, compare.
  1418.           cd first-dir
  1419. ***************
  1420. *** 2022,2029 ****
  1421.   T [0-9/]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-tag:rtagged-by-head\]
  1422.   T [0-9/]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-revision:1\.1\]
  1423.   O [0-9/]* [0-9:]* ${PLUS}0000 ${username} \[1\.1\] first-dir           =first-dir= ${TMPPWD}/\*
  1424. ! U [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6     first-dir           == ${TMPPWD}/first-dir
  1425. ! U [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7     first-dir           == ${TMPPWD}/first-dir" \
  1426.   "O [0-9/]* [0-9:]* ${PLUS}0000 ${username} first-dir           =first-dir= <remote>/\*
  1427.   A [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6     first-dir           == <remote>
  1428.   A [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7     first-dir           == <remote>
  1429. --- 2340,2347 ----
  1430.   T [0-9/]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-tag:rtagged-by-head\]
  1431.   T [0-9/]* [0-9:]* ${PLUS}0000 ${username} first-dir \[rtagged-by-revision:1\.1\]
  1432.   O [0-9/]* [0-9:]* ${PLUS}0000 ${username} \[1\.1\] first-dir           =first-dir= ${TMPPWD}/\*
  1433. ! U [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file6     first-dir           == ${TMPPWD}${SLASH}first-dir
  1434. ! U [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.2 file7     first-dir           == ${TMPPWD}${SLASH}first-dir" \
  1435.   "O [0-9/]* [0-9:]* ${PLUS}0000 ${username} first-dir           =first-dir= <remote>/\*
  1436.   A [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file6     first-dir           == <remote>
  1437.   A [0-9/]* [0-9:]* ${PLUS}0000 ${username} 1\.1 file7     first-dir           == <remote>
  1438. ***************
  1439. *** 2112,2117 ****
  1440. --- 2430,2436 ----
  1441.   U trdiff/bar
  1442.   U trdiff/foo"
  1443.           cd trdiff
  1444. +         sleep ${FILESYSTEM_TICK}
  1445.           echo something >> foo
  1446.           dotest rdiff-3 \
  1447.             "${testcvs} ci -m added-something foo" \
  1448. ***************
  1449. *** 2174,2181 ****
  1450.   ! \$''Name: local-v0 \$
  1451.   ! something
  1452.   Index: trdiff/new
  1453. ! diff -c /dev/null trdiff/new:1\.1
  1454. ! \*\*\* /dev/null    .*
  1455.   --- trdiff/new    .*
  1456.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1457.   \*\*\* 0 \*\*\*\*
  1458. --- 2493,2500 ----
  1459.   ! \$''Name: local-v0 \$
  1460.   ! something
  1461.   Index: trdiff/new
  1462. ! diff -c '"${DEVNULL}"' trdiff/new:1\.1
  1463. ! \*\*\* '"${DEVNULL}"'    .*
  1464.   --- trdiff/new    .*
  1465.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1466.   \*\*\* 0 \*\*\*\*
  1467. ***************
  1468. *** 2329,2334 ****
  1469. --- 2648,2654 ----
  1470.   T file2'
  1471.   
  1472.           # branch1
  1473. +         sleep ${FILESYSTEM_TICK}
  1474.           if ${CVS} tag -b branch1  ; then
  1475.               pass 73
  1476.           else
  1477. ***************
  1478. *** 2336,2341 ****
  1479. --- 2656,2662 ----
  1480.           fi
  1481.   
  1482.           # and move to the branch.
  1483. +         sleep ${FILESYSTEM_TICK}
  1484.           if ${CVS} update -r branch1  ; then
  1485.               pass 74
  1486.           else
  1487. ***************
  1488. *** 2362,2369 ****
  1489.           dotest death-76a0 \
  1490.   "${testcvs} -q rdiff -r bp_branch1 -r branch1 first-dir" \
  1491.   "Index: first-dir/file3
  1492. ! diff -c /dev/null first-dir/file3:1\.1\.2\.1
  1493. ! \*\*\* /dev/null    .*
  1494.   --- first-dir/file3    .*
  1495.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1496.   \*\*\* 0 \*\*\*\*
  1497. --- 2683,2690 ----
  1498.           dotest death-76a0 \
  1499.   "${testcvs} -q rdiff -r bp_branch1 -r branch1 first-dir" \
  1500.   "Index: first-dir/file3
  1501. ! diff -c ${DEVNULL} first-dir/file3:1\.1\.2\.1
  1502. ! \*\*\* ${DEVNULL}    .*
  1503.   --- first-dir/file3    .*
  1504.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1505.   \*\*\* 0 \*\*\*\*
  1506. ***************
  1507. *** 2526,2531 ****
  1508. --- 2847,2853 ----
  1509.           fi
  1510.   
  1511.           # typo; try to get to the branch and fail
  1512. +         sleep ${FILESYSTEM_TICK}
  1513.           dotest_fail 92.1a "${testcvs} update -r brnach1" \
  1514.             "${PROG}"' \[[a-z]* aborted\]: no such tag brnach1'
  1515.           # Make sure we are still on the trunk
  1516. ***************
  1517. *** 2541,2546 ****
  1518. --- 2863,2869 ----
  1519.           fi
  1520.   
  1521.           # back to branch1
  1522. +         sleep ${FILESYSTEM_TICK}
  1523.           if ${CVS} update -r branch1  2>> ${LOGFILE}; then
  1524.               pass 93
  1525.           else
  1526. ***************
  1527. *** 2602,2607 ****
  1528. --- 2925,2931 ----
  1529.   done"
  1530.   
  1531.         # Make a branch and a non-branch tag.
  1532. +       sleep ${FILESYSTEM_TICK}
  1533.         dotest death2-4 "${testcvs} -q tag -b branch" \
  1534.   'T file1
  1535.   T file4'
  1536. ***************
  1537. *** 2610,2615 ****
  1538. --- 2934,2940 ----
  1539.   T file4'
  1540.   
  1541.         # Switch over to the branch.
  1542. +       sleep ${FILESYSTEM_TICK}
  1543.         dotest death2-6 "${testcvs} -q update -r branch" ''
  1544.   
  1545.         # Delete the file on the branch.
  1546. ***************
  1547. *** 2631,2637 ****
  1548.   RCS file: file1
  1549.   diff -N file1
  1550.   \*\*\* ${tempname}[     ][    ]*[a-zA-Z0-9: ]*
  1551. ! --- /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1552.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1553.   \*\*\* 1 \*\*\*\*
  1554.   - first revision
  1555. --- 2956,2962 ----
  1556.   RCS file: file1
  1557.   diff -N file1
  1558.   \*\*\* ${tempname}[     ][    ]*[a-zA-Z0-9: ]*
  1559. ! --- ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1560.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1561.   \*\*\* 1 \*\*\*\*
  1562.   - first revision
  1563. ***************
  1564. *** 2655,2661 ****
  1565.   RCS file: file1
  1566.   diff -N file1
  1567.   \*\*\* ${tempname}[     ][    ]*[a-zA-Z0-9: ]*
  1568. ! --- /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1569.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1570.   \*\*\* 1 \*\*\*\*
  1571.   - first revision
  1572. --- 2980,2986 ----
  1573.   RCS file: file1
  1574.   diff -N file1
  1575.   \*\*\* ${tempname}[     ][    ]*[a-zA-Z0-9: ]*
  1576. ! --- ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1577.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1578.   \*\*\* 1 \*\*\*\*
  1579.   - first revision
  1580. ***************
  1581. *** 2670,2676 ****
  1582.   RCS file: file1
  1583.   diff -N file1
  1584.   \*\*\* ${tempname}[     ][    ]*[a-zA-Z0-9: ]*
  1585. ! --- /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1586.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1587.   \*\*\* 1 \*\*\*\*
  1588.   - first revision
  1589. --- 2995,3001 ----
  1590.   RCS file: file1
  1591.   diff -N file1
  1592.   \*\*\* ${tempname}[     ][    ]*[a-zA-Z0-9: ]*
  1593. ! --- ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1594.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1595.   \*\*\* 1 \*\*\*\*
  1596.   - first revision
  1597. ***************
  1598. *** 2705,2711 ****
  1599.   ===================================================================
  1600.   RCS file: file1
  1601.   diff -N file1
  1602. ! \*\*\* /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1603.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1604.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1605.   \*\*\* 0 \*\*\*\*
  1606. --- 3030,3036 ----
  1607.   ===================================================================
  1608.   RCS file: file1
  1609.   diff -N file1
  1610. ! \*\*\* ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1611.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1612.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1613.   \*\*\* 0 \*\*\*\*
  1614. ***************
  1615. *** 2758,2763 ****
  1616. --- 3083,3089 ----
  1617.         # The ``no longer in the repository'' message doesn't really
  1618.         # look right to me, but that's what CVS currently prints for
  1619.         # this case.
  1620. +       sleep ${FILESYSTEM_TICK}
  1621.         dotest death2-14 "${testcvs} -q update -r branch" \
  1622.   "[UP] file1
  1623.   ${PROG} [a-z]*: file2 is no longer in the repository
  1624. ***************
  1625. *** 2796,2802 ****
  1626.   ===================================================================
  1627.   RCS file: file3
  1628.   diff -N file3
  1629. ! \*\*\* /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1630.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1631.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1632.   \*\*\* 0 \*\*\*\*
  1633. --- 3122,3128 ----
  1634.   ===================================================================
  1635.   RCS file: file3
  1636.   diff -N file3
  1637. ! \*\*\* ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1638.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1639.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1640.   \*\*\* 0 \*\*\*\*
  1641. ***************
  1642. *** 2839,2845 ****
  1643.   ===================================================================
  1644.   RCS file: file2
  1645.   diff -N file2
  1646. ! \*\*\* /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1647.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1648.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1649.   \*\*\* 0 \*\*\*\*
  1650. --- 3165,3171 ----
  1651.   ===================================================================
  1652.   RCS file: file2
  1653.   diff -N file2
  1654. ! \*\*\* ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1655.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1656.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1657.   \*\*\* 0 \*\*\*\*
  1658. ***************
  1659. *** 2849,2855 ****
  1660.   ===================================================================
  1661.   RCS file: file3
  1662.   diff -N file3
  1663. ! \*\*\* /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1664.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1665.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1666.   \*\*\* 0 \*\*\*\*
  1667. --- 3175,3181 ----
  1668.   ===================================================================
  1669.   RCS file: file3
  1670.   diff -N file3
  1671. ! \*\*\* ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1672.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1673.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1674.   \*\*\* 0 \*\*\*\*
  1675. ***************
  1676. *** 2860,2872 ****
  1677.   RCS file: file4
  1678.   diff -N file4
  1679.   \*\*\* ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1680. ! --- /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1681.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1682.   \*\*\* 1 \*\*\*\*
  1683.   - file4 first revision
  1684.   --- 0 ----"
  1685.   
  1686.         # Switch to the nonbranch tag.
  1687.         dotest death2-19 "${testcvs} -q update -r tag" \
  1688.   "[UP] file1
  1689.   ${PROG} [a-z]*: file2 is no longer in the repository
  1690. --- 3186,3199 ----
  1691.   RCS file: file4
  1692.   diff -N file4
  1693.   \*\*\* ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1694. ! --- ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1695.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1696.   \*\*\* 1 \*\*\*\*
  1697.   - file4 first revision
  1698.   --- 0 ----"
  1699.   
  1700.         # Switch to the nonbranch tag.
  1701. +       sleep ${FILESYSTEM_TICK}
  1702.         dotest death2-19 "${testcvs} -q update -r tag" \
  1703.   "[UP] file1
  1704.   ${PROG} [a-z]*: file2 is no longer in the repository
  1705. ***************
  1706. *** 2884,2890 ****
  1707.   ===================================================================
  1708.   RCS file: file1
  1709.   diff -N file1
  1710. ! \*\*\* /dev/null[     ][     ]*[a-zA-Z0-9: ]*
  1711.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1712.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1713.   \*\*\* 0 \*\*\*\*
  1714. --- 3211,3217 ----
  1715.   ===================================================================
  1716.   RCS file: file1
  1717.   diff -N file1
  1718. ! \*\*\* ${DEVNULL}[     ][     ]*${DEVNULL_TIME}
  1719.   --- ${tempname}[     ][     ]*[a-zA-Z0-9: ]*
  1720.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1721.   \*\*\* 0 \*\*\*\*
  1722. ***************
  1723. *** 2936,2941 ****
  1724. --- 3263,3269 ----
  1725.   initial revision: 1.1
  1726.   done
  1727.   HERE
  1728. +       sleep ${FILESYSTEM_TICK}
  1729.         echo 4:trunk-2 >file4
  1730.         dotest branches-3.2 "${testcvs} -q ci -m trunk-before-branch" \
  1731.   "Checking in file4;
  1732. ***************
  1733. *** 2949,2961 ****
  1734. --- 3277,3292 ----
  1735.   T file2
  1736.   T file3
  1737.   T file4"
  1738. +       sleep ${FILESYSTEM_TICK}
  1739.         dotest branches-4 "${testcvs} tag -b br1" "${PROG}"' [a-z]*: Tagging \.
  1740.   T file1
  1741.   T file2
  1742.   T file3
  1743.   T file4'
  1744. +       sleep ${FILESYSTEM_TICK}
  1745.         dotest branches-5 "${testcvs} update -r br1" \
  1746.   "${PROG}"' [a-z]*: Updating \.'
  1747. +       sleep ${FILESYSTEM_TICK}
  1748.         echo 1:br1 >file1
  1749.         echo 2:br1 >file2
  1750.         echo 4:br1 >file4
  1751. ***************
  1752. *** 2972,2982 ****
  1753. --- 3303,3316 ----
  1754.   ${TESTDIR}/cvsroot/first-dir/file4,v  <--  file4
  1755.   new revision: 1\.2\.2\.1; previous revision: 1\.2
  1756.   done"
  1757. +       sleep ${FILESYSTEM_TICK}
  1758.         dotest branches-7 "${testcvs} -q tag -b brbr" 'T file1
  1759.   T file2
  1760.   T file3
  1761.   T file4'
  1762. +       sleep ${FILESYSTEM_TICK}
  1763.         dotest branches-8 "${testcvs} -q update -r brbr" ''
  1764. +       sleep ${FILESYSTEM_TICK}
  1765.         echo 1:brbr >file1
  1766.         echo 4:brbr >file4
  1767.         dotest branches-9 "${testcvs} -q ci -m modify" \
  1768. ***************
  1769. *** 2992,2997 ****
  1770. --- 3326,3332 ----
  1771.   2:br1
  1772.   3:ancest
  1773.   4:brbr'
  1774. +       sleep ${FILESYSTEM_TICK}
  1775.         dotest branches-11 "${testcvs} -q update -r br1" \
  1776.   '[UP] file1
  1777.   [UP] file4'
  1778. ***************
  1779. *** 2999,3004 ****
  1780. --- 3334,3340 ----
  1781.   2:br1
  1782.   3:ancest
  1783.   4:br1'
  1784. +       sleep ${FILESYSTEM_TICK}
  1785.         echo 4:br1-2 >file4
  1786.         dotest branches-12.2 "${testcvs} -q ci -m change-on-br1" \
  1787.   "Checking in file4;
  1788. ***************
  1789. *** 3012,3017 ****
  1790. --- 3348,3354 ----
  1791.   2:ancest
  1792.   3:ancest
  1793.   4:trunk-2'
  1794. +       sleep ${FILESYSTEM_TICK}
  1795.         echo 4:trunk-3 >file4
  1796.         dotest branches-14.2 \
  1797.           "${testcvs} -q ci -m trunk-change-after-branch" \
  1798. ***************
  1799. *** 3152,3158 ****
  1800. --- 3489,3497 ----
  1801.         dotest branches2-4 "${testcvs} -q tag tag1" 'T file1'
  1802.   
  1803.         # Make two branches.
  1804. +       sleep ${FILESYSTEM_TICK}
  1805.         dotest branches2-5 "${testcvs} -q rtag -b -r tag1 b1 first-dir" ''
  1806. +       sleep ${FILESYSTEM_TICK}
  1807.         dotest branches2-6 "${testcvs} -q rtag -b -r tag1 b2 first-dir" ''
  1808.   
  1809.         # Create some files and a subdirectory on branch b1.
  1810. ***************
  1811. *** 3419,3424 ****
  1812. --- 3758,3764 ----
  1813.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  1814.   I am the first foo, and my name is \$""Name: first \$\."
  1815.   
  1816. +       sleep ${FILESYSTEM_TICK}
  1817.         echo "I am the second foo, and my name is $""Name$." > foo.c
  1818.         dotest rcsdiff-6 "${testcvs} commit -m rev2 foo.c" \
  1819.   "Checking in foo\.c;
  1820. ***************
  1821. *** 3447,3452 ****
  1822. --- 3787,3793 ----
  1823.   ---
  1824.   > I am the second foo, and my name is \$""Name:  \$\."
  1825.   
  1826. +       sleep ${FILESYSTEM_TICK}
  1827.         echo "I am the once and future foo, and my name is $""Name$." > foo.c
  1828.         dotest_fail rcsdiff-10 "${testcvs} diff -r first" \
  1829.   "${PROG} [a-z]*: Diffing \.
  1830. ***************
  1831. *** 3485,3490 ****
  1832. --- 3826,3832 ----
  1833.   ${TESTDIR}/cvsroot/first-dir/rgx\.c,v  <--  rgx\.c
  1834.   initial revision: 1\.1
  1835.   done"
  1836. +       sleep ${FILESYSTEM_TICK}
  1837.         cat >rgx.c <<EOF
  1838.   test_regex (whiz, bang)
  1839.   {
  1840. ***************
  1841. *** 3549,3561 ****
  1842. --- 3891,3906 ----
  1843.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  1844.   initial revision: 1\.1
  1845.   done"
  1846. +       sleep ${FILESYSTEM_TICK}
  1847.         sed -e 's/2/two/' file1 > f; mv f file1
  1848.         dotest rcslib-merge-6 "${testcvs} -q commit -m '' file1" \
  1849.   "Checking in file1;
  1850.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  1851.   new revision: 1\.2; previous revision: 1\.1
  1852.   done"
  1853. +       sleep ${FILESYSTEM_TICK}
  1854.         dotest rcslib-merge-7 "${testcvs} -q tag -b -r 1.1 patch1" "T file1"
  1855. +       sleep ${FILESYSTEM_TICK}
  1856.         dotest rcslib-merge-8 "${testcvs} -q update -r patch1" "[UP] file1"
  1857.         dotest rcslib-merge-9 "${testcvs} -q status" \
  1858.   "===================================================================
  1859. ***************
  1860. *** 3570,3575 ****
  1861. --- 3915,3921 ----
  1862.   '$''Revision: 1\.1 $
  1863.   2
  1864.   3'
  1865. +       sleep ${FILESYSTEM_TICK}
  1866.         sed -e 's/3/three/' file1 > f; mv f file1
  1867.         dotest rcslib-merge-11 "${testcvs} -q commit -m '' file1" \
  1868.   "Checking in file1;
  1869. ***************
  1870. *** 3623,3650 ****
  1871. --- 3969,4004 ----
  1872.   initial revision: 1.1
  1873.   done
  1874.   HERE
  1875. +       sleep ${FILESYSTEM_TICK}
  1876.         dotest multibranch-4 "${testcvs} tag -b br1" \
  1877.   "${PROG} [a-z]*: Tagging \.
  1878.   T file1"
  1879. +       sleep ${FILESYSTEM_TICK}
  1880.         dotest multibranch-5 "${testcvs} tag -b br2" \
  1881.   "${PROG} [a-z]*: Tagging \.
  1882.   T file1"
  1883. +       sleep ${FILESYSTEM_TICK}
  1884.         dotest multibranch-6 "${testcvs} -q update -r br1" ''
  1885. +       sleep ${FILESYSTEM_TICK}
  1886.         echo on-br1 >file1
  1887.         dotest multibranch-7 "${testcvs} -q ci -m modify-on-br1" \
  1888.   "Checking in file1;
  1889.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  1890.   new revision: 1\.1\.2\.1; previous revision: 1\.1
  1891.   done"
  1892. +       sleep ${FILESYSTEM_TICK}
  1893.         dotest multibranch-8 "${testcvs} -q update -r br2" '[UP] file1'
  1894. +       sleep ${FILESYSTEM_TICK}
  1895.         echo br2 adds a line >>file1
  1896.         dotest multibranch-9 "${testcvs} -q ci -m modify-on-br2" \
  1897.   "Checking in file1;
  1898.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  1899.   new revision: 1\.1\.4\.1; previous revision: 1\.1
  1900.   done"
  1901. +       sleep ${FILESYSTEM_TICK}
  1902.         dotest multibranch-10 "${testcvs} -q update -r br1" '[UP] file1'
  1903.         dotest multibranch-11 "cat file1" 'on-br1'
  1904. +       sleep ${FILESYSTEM_TICK}
  1905.         dotest multibranch-12 "${testcvs} -q update -r br2" '[UP] file1'
  1906.         dotest multibranch-13 "cat file1" '1:trunk-1
  1907.   br2 adds a line'
  1908. ***************
  1909. *** 3761,3766 ****
  1910. --- 4115,4121 ----
  1911.           fi
  1912.   
  1913.           # change
  1914. +         sleep ${FILESYSTEM_TICK}
  1915.           echo local-change >> imported-f2
  1916.   
  1917.           # commit
  1918. ***************
  1919. *** 3778,3783 ****
  1920. --- 4133,4139 ----
  1921.           fi
  1922.   
  1923.           # update into the vendor branch.
  1924. +         sleep ${FILESYSTEM_TICK}
  1925.           if ${CVS} update -rvendor-branch  ; then
  1926.               pass 102
  1927.           else
  1928. ***************
  1929. *** 3809,3814 ****
  1930. --- 4165,4171 ----
  1931.   
  1932.           # second import - file4 deliberately unchanged
  1933.           cd ../import-dir
  1934. +         sleep ${FILESYSTEM_TICK}
  1935.           for i in 1 2 3 ; do
  1936.               echo rev 2 of file $i >> imported-f"$i"
  1937.           done
  1938. ***************
  1939. *** 3851,3856 ****
  1940. --- 4208,4214 ----
  1941.           done
  1942.   
  1943.           # check vendor branch for file4
  1944. +         sleep ${FILESYSTEM_TICK}
  1945.           if ${CVS} update -rvendor-branch  ; then
  1946.               pass 110
  1947.           else
  1948. ***************
  1949. *** 4066,4072 ****
  1950.           # 1.9 did not).
  1951.           dotest_fail importc-7 "${testcvs} -q ci -m modify -r wip_test" \
  1952.   "${PROG} [a-z]*: in directory adir/sub1/ssdir:
  1953. ! ${PROG} \[[a-z]* aborted\]: there is no version here; do .cvs checkout. first"
  1954.           # The workaround is to leave off the "-r wip_test".
  1955.           dotest importc-8 "${testcvs} -q ci -m modify" \
  1956.   "Checking in cdir/cfile;
  1957. --- 4424,4430 ----
  1958.           # 1.9 did not).
  1959.           dotest_fail importc-7 "${testcvs} -q ci -m modify -r wip_test" \
  1960.   "${PROG} [a-z]*: in directory adir/sub1/ssdir:
  1961. ! ${PROG} \[[a-z]* aborted\]: there is no version here; do .${PROG} checkout. first"
  1962.           # The workaround is to leave off the "-r wip_test".
  1963.           dotest importc-8 "${testcvs} -q ci -m modify" \
  1964.   "Checking in cdir/cfile;
  1965. ***************
  1966. *** 4203,4208 ****
  1967. --- 4561,4567 ----
  1968.   done"
  1969.   
  1970.         # Make a branch.
  1971. +       sleep ${FILESYSTEM_TICK}
  1972.         dotest join-4 "${testcvs} -q tag -b branch ." \
  1973.   'T file3
  1974.   T file4
  1975. ***************
  1976. *** 4211,4216 ****
  1977. --- 4570,4576 ----
  1978.   
  1979.         # Add file2 and file7, modify file4, and remove file6 and file8.
  1980.         echo 'first revision of file2' > file2
  1981. +       sleep ${FILESYSTEM_TICK}
  1982.         echo 'second revision of file4' > file4
  1983.         echo 'first revision of file7' > file7
  1984.         rm file6 file8
  1985. ***************
  1986. *** 4262,4267 ****
  1987. --- 4622,4628 ----
  1988.   
  1989.         # Modify the files on the branch, so that T1 is not an
  1990.         # ancestor of the main line, and add file5
  1991. +       sleep ${FILESYSTEM_TICK}
  1992.         echo 'first branch revision of file3' > file3
  1993.         echo 'first branch revision of file4' > file4
  1994.         echo 'first branch revision of file6' > file6
  1995. ***************
  1996. *** 4429,4434 ****
  1997. --- 4790,4796 ----
  1998.         # single revision.
  1999.         # The file2 handling is a bug; see above join-20.
  2000.         cd first-dir
  2001. +       sleep ${FILESYSTEM_TICK}
  2002.         echo 'third revision of file4' > file4
  2003.         dotest join-23 "${testcvs} -q update -jbranch ." \
  2004.   "U file1
  2005. ***************
  2006. *** 4459,4469 ****
  2007. --- 4821,4833 ----
  2008.   U first-dir/file4
  2009.   U first-dir/file7'
  2010.         cd first-dir
  2011. +       sleep ${FILESYSTEM_TICK}
  2012.         dotest join-26 "${testcvs} -q tag -b br2" \
  2013.   "T file2
  2014.   T file3
  2015.   T file4
  2016.   T file7"
  2017. +       sleep ${FILESYSTEM_TICK}
  2018.         dotest join-27 "${testcvs} -q update -r br2" ""
  2019.         # The handling of file8 here looks fishy to me.  I don't see
  2020.         # why it should be different from the case where we merge to
  2021. ***************
  2022. *** 4512,4519 ****
  2023. --- 4876,4886 ----
  2024.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  2025.   initial revision: 1\.1
  2026.   done"
  2027. +       sleep ${FILESYSTEM_TICK}
  2028.         dotest join2-5 "${testcvs} -q tag -b br1" "T file1"
  2029. +       sleep ${FILESYSTEM_TICK}
  2030.         dotest join2-6 "${testcvs} -q update -r br1" ""
  2031. +       sleep ${FILESYSTEM_TICK}
  2032.         echo 'modify on branch' >>file1
  2033.         touch bradd
  2034.         dotest join2-6a "${testcvs} add bradd" \
  2035. ***************
  2036. *** 4573,4578 ****
  2037. --- 4940,4946 ----
  2038.         # OK, the above is all well and good and has worked for some
  2039.         # time.  Now try the case where the file had been added on
  2040.         # the branch.
  2041. +       sleep ${FILESYSTEM_TICK}
  2042.         dotest join2-16 "${testcvs} -q update -r br1" "[UP] file1"
  2043.         # The workaround is to update the whole directory.
  2044.         # The non-circumvented version won't work.  The reason is that
  2045. ***************
  2046. *** 4630,4636 ****
  2047. --- 4998,5006 ----
  2048.   initial revision: 1\.1
  2049.   done"
  2050.         dotest join3-5 "${testcvs} -q tag -b br1" "T file1"
  2051. +       sleep ${FILESYSTEM_TICK}
  2052.         dotest join3-6 "${testcvs} -q update -r br1" ""
  2053. +       sleep ${FILESYSTEM_TICK}
  2054.         echo 'br1:line1' >>file1
  2055.         dotest join3-7 "${testcvs} -q ci -m modify" \
  2056.   "Checking in file1;
  2057. ***************
  2058. *** 4641,4651 ****
  2059. --- 5011,5024 ----
  2060.         # Now back to the trunk for:
  2061.         # another revision and another branch for file1.
  2062.         # add file2, which will exist on trunk and br2 but not br1.
  2063. +       sleep ${FILESYSTEM_TICK}
  2064.         dotest join3-8 "${testcvs} -q update -A" "[UP] file1"
  2065. +       sleep ${FILESYSTEM_TICK}
  2066.         echo 'trunk:line1' > file2
  2067.         dotest join3-8a "${testcvs} add file2" \
  2068.   "${PROG} [a-z]*: scheduling file .file2. for addition
  2069.   ${PROG} [a-z]*: use .${PROG} commit. to add this file permanently"
  2070. +       sleep ${FILESYSTEM_TICK}
  2071.         echo 'trunk:line1' >>file1
  2072.         dotest join3-9 "${testcvs} -q ci -m modify" \
  2073.   "Checking in file1;
  2074. ***************
  2075. *** 4658,4667 ****
  2076. --- 5031,5042 ----
  2077.   ${TESTDIR}/cvsroot/first-dir/file2,v  <--  file2
  2078.   initial revision: 1\.1
  2079.   done"
  2080. +       sleep ${FILESYSTEM_TICK}
  2081.         dotest join3-10 "${testcvs} -q tag -b br2" "T file1
  2082.   T file2"
  2083.   
  2084.         # Before we actually have any revision on br2, let's try a join
  2085. +       sleep ${FILESYSTEM_TICK}
  2086.         dotest join3-11 "${testcvs} -q update -r br1" "[UP] file1
  2087.   ${PROG} [a-z]*: file2 is no longer in the repository"
  2088.         dotest join3-12 "${testcvs} -q update -j br2" \
  2089. ***************
  2090. *** 4681,4689 ****
  2091. --- 5056,5066 ----
  2092.         rm file1
  2093.   
  2094.         # OK, we'll try the same thing with a revision on br2.
  2095. +       sleep ${FILESYSTEM_TICK}
  2096.         dotest join3-14 "${testcvs} -q update -r br2 file1" \
  2097.   "${PROG} [a-z]*: warning: file1 was lost
  2098.   U file1" "U file1"
  2099. +       sleep ${FILESYSTEM_TICK}
  2100.         echo 'br2:line1' >>file1
  2101.         dotest join3-15 "${testcvs} -q ci -m modify file1" \
  2102.   "Checking in file1;
  2103. ***************
  2104. *** 4692,4697 ****
  2105. --- 5069,5075 ----
  2106.   done"
  2107.   
  2108.         # OK, now we can join br2 to br1
  2109. +       sleep ${FILESYSTEM_TICK} 
  2110.         dotest join3-16 "${testcvs} -q update -r br1 file1" "[UP] file1"
  2111.         # It may seem odd, to merge a higher branch into a lower
  2112.         # branch, but in fact CVS defines the ancestor as 1.1
  2113. ***************
  2114. *** 4761,4766 ****
  2115. --- 5139,5145 ----
  2116.               pass 122
  2117.           fi
  2118.   
  2119. +         sleep ${FILESYSTEM_TICK}
  2120.           if ${CVS} update -rHEAD 2>&1 | grep longer ; then
  2121.               fail 123
  2122.           else
  2123. ***************
  2124. *** 4796,4801 ****
  2125. --- 5175,5181 ----
  2126.   done"
  2127.   
  2128.         # Make a branch.
  2129. +       sleep ${FILESYSTEM_TICK}
  2130.         dotest newb-123d "${testcvs} -q tag -b branch" "T a"
  2131.   
  2132.         # Check out the branch.
  2133. ***************
  2134. *** 4900,4906 ****
  2135.   "${PROG} [a-z]*: Updating first-dir
  2136.   ===================================================================
  2137.   Checking out first-dir/a
  2138. ! RCS:  ${TMPPWD}/cvsroot/first-dir/a,v
  2139.   VERS: 1\.1
  2140.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"
  2141.           if ${CVS} co first-dir ; then
  2142. --- 5280,5286 ----
  2143.   "${PROG} [a-z]*: Updating first-dir
  2144.   ===================================================================
  2145.   Checking out first-dir/a
  2146. ! RCS:  ${TMPPWD}${SLASH}cvsroot${SLASH}first-dir${SLASH}a,v
  2147.   VERS: 1\.1
  2148.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"
  2149.           if ${CVS} co first-dir ; then
  2150. ***************
  2151. *** 4916,4921 ****
  2152. --- 5296,5302 ----
  2153.           fi
  2154.   
  2155.           cd ../../1/first-dir
  2156. +         sleep ${FILESYSTEM_TICK}
  2157.           echo add a line >>a
  2158.           mkdir dir1
  2159.           dotest conflicts-127b "${testcvs} add dir1" \
  2160. ***************
  2161. *** 4937,4943 ****
  2162.   "${PROG} [a-z]*: Updating first-dir
  2163.   ===================================================================
  2164.   Checking out first-dir/a
  2165. ! RCS:  ${TMPPWD}/cvsroot/first-dir/a,v
  2166.   VERS: 1\.2
  2167.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  2168.   add a line"
  2169. --- 5318,5324 ----
  2170.   "${PROG} [a-z]*: Updating first-dir
  2171.   ===================================================================
  2172.   Checking out first-dir/a
  2173. ! RCS:  ${TMPPWD}${SLASH}cvsroot${SLASH}first-dir${SLASH}a,v
  2174.   VERS: 1\.2
  2175.   \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  2176.   add a line"
  2177. ***************
  2178. *** 4947,4952 ****
  2179. --- 5328,5334 ----
  2180.           # Now go over the to the other working directory and
  2181.           # start testing conflicts
  2182.           cd 2/first-dir
  2183. +         sleep ${FILESYSTEM_TICK}
  2184.           echo add a conflicting line >>a
  2185.           dotest_fail conflicts-129 "${testcvs} -q ci -m changed" \
  2186.   "${PROG}"' [a-z]*: Up-to-date check failed for `a'\''
  2187. ***************
  2188. *** 4996,5001 ****
  2189. --- 5378,5384 ----
  2190.   "${PROG} [a-z]*: file .a. had a conflict and has not been modified
  2191.   ${PROG} \[[a-z]* aborted\]: correct above errors first!"
  2192.   
  2193. +         sleep ${FILESYSTEM_TICK}
  2194.           echo lame attempt at resolving it >>a
  2195.           # Try to check in the file with the conflict markers in it.
  2196.           dotest conflicts-status-2 "${testcvs} status a" \
  2197. ***************
  2198. *** 5016,5021 ****
  2199. --- 5399,5405 ----
  2200.   
  2201.           # OK, the user saw the warning (good user), and now
  2202.           # resolves it for real.
  2203. +         sleep ${FILESYSTEM_TICK}
  2204.           echo resolve conflict >a
  2205.           dotest conflicts-status-3 "${testcvs} status a" \
  2206.   "===================================================================
  2207. ***************
  2208. *** 5483,5488 ****
  2209. --- 5867,5873 ----
  2210.   U CVSROOT/rcsinfo
  2211.   U CVSROOT/taginfo
  2212.   U CVSROOT/verifymsg'
  2213. +       sleep ${FILESYSTEM_TICK}
  2214.         echo "# made a change" >>CVSROOT/modules
  2215.         dotest modules-1d "${testcvs} -q ci -m add-modules" \
  2216.   "Checking in CVSROOT/modules;
  2217. ***************
  2218. *** 5507,5512 ****
  2219. --- 5892,5898 ----
  2220.   U CVSROOT/rcsinfo
  2221.   U CVSROOT/taginfo
  2222.   U CVSROOT/verifymsg'
  2223. +       sleep ${FILESYSTEM_TICK}
  2224.         echo "# made a change" >>CVSROOT/modules
  2225.         dotest modules-2d "${testcvs} -q ci -m add-modules" \
  2226.   "Checking in CVSROOT/modules;
  2227. ***************
  2228. *** 5534,5539 ****
  2229. --- 5920,5926 ----
  2230.   U CVSROOT/rcsinfo
  2231.   U CVSROOT/taginfo
  2232.   U CVSROOT/verifymsg'
  2233. +       sleep ${FILESYSTEM_TICK}
  2234.         echo "# made a change" >>CVSROOT/modules
  2235.         dotest modules-3g "${testcvs} -q ci -m add-modules" \
  2236.   "Checking in CVSROOT/modules;
  2237. ***************
  2238. *** 5599,5604 ****
  2239. --- 5986,5992 ----
  2240.             fail 147
  2241.         fi
  2242.   
  2243. +       sleep ${FILESYSTEM_TICK}
  2244.         echo realmodule first-dir/subdir a >CVSROOT/modules
  2245.         echo dirmodule first-dir/subdir >>CVSROOT/modules
  2246.         echo namedmodule -d nameddir first-dir/subdir >>CVSROOT/modules
  2247. ***************
  2248. *** 5725,5730 ****
  2249. --- 6113,6119 ----
  2250.         else
  2251.           fail 150h2
  2252.         fi
  2253. +       sleep ${FILESYSTEM_TICK}
  2254.         echo add line >>nameddir/a
  2255.         dotest 150h3 "${testcvs} -q co namedmodule" 'M nameddir/a'
  2256.         rm nameddir/a
  2257. ***************
  2258. *** 5747,5752 ****
  2259. --- 6136,6142 ----
  2260.         else
  2261.             pass 152
  2262.         fi
  2263. +       sleep ${FILESYSTEM_TICK}
  2264.         echo abc >>first-dir/subdir/a
  2265.         if (${testcvs} -q co aliasmodule | tee test153.tmp) \
  2266.             >>${LOGFILE}; then
  2267. ***************
  2268. *** 5877,5882 ****
  2269. --- 6267,6273 ----
  2270.         dotest modules2-1 "${testcvs} -q co CVSROOT/modules" \
  2271.   'U CVSROOT/modules'
  2272.         cd CVSROOT
  2273. +       sleep ${FILESYSTEM_TICK}
  2274.         echo 'ampermodule &first-dir &second-dir' > modules
  2275.         echo 'combmodule third-dir file3 &first-dir' >> modules
  2276.         # Depending on whether the user also ran the modules test
  2277. ***************
  2278. *** 6009,6014 ****
  2279. --- 6400,6406 ----
  2280.         dotest modules2-a0.5 "${testcvs} -q co CVSROOT/modules" \
  2281.   'U CVSROOT/modules'
  2282.         cd CVSROOT
  2283. +       sleep ${FILESYSTEM_TICK}
  2284.         echo 'aliasopt -a -d onedir first-dir' >modules
  2285.         dotest modules2-a0 "${testcvs} -q ci -m add-modules" \
  2286.   "Checking in modules;
  2287. ***************
  2288. *** 6060,6065 ****
  2289. --- 6452,6458 ----
  2290.         dotest modules3-4 "${testcvs} -q update -d CVSROOT" \
  2291.   "U CVSROOT${DOTSTAR}"
  2292.         cd CVSROOT
  2293. +       sleep ${FILESYSTEM_TICK}
  2294.         cat >modules <<EOF
  2295.   mod1 -a first-dir/file1
  2296.   bigmod -a mod1 first-dir/file1
  2297. ***************
  2298. *** 6250,6255 ****
  2299. --- 6643,6649 ----
  2300.         dotest modules4-7 "${testcvs} -q update -d CVSROOT" \
  2301.   "U CVSROOT${DOTSTAR}"
  2302.         cd CVSROOT
  2303. +       sleep ${FILESYSTEM_TICK}
  2304.         cat >modules <<EOF
  2305.   all -a first-dir
  2306.   some -a !first-dir/subdir first-dir
  2307. ***************
  2308. *** 7764,7769 ****
  2309. --- 8158,8164 ----
  2310.         mkdir 1; cd 1
  2311.         dotest emptydir-1 "${testcvs} co CVSROOT/modules" \
  2312.   "U CVSROOT/modules"
  2313. +       sleep ${FILESYSTEM_TICK}
  2314.         echo "# Module defs for emptydir tests" > CVSROOT/modules
  2315.         echo "2d1mod -d dir2d1/sub2d1 mod1" >> CVSROOT/modules
  2316.   
  2317. ***************
  2318. *** 7968,7973 ****
  2319. --- 8363,8369 ----
  2320.         rm -rf ${TESTDIR}/1
  2321.   
  2322.   
  2323. +     if test x"${CANT_PROTECT_DIRS}" = x; then
  2324.         # Now try someplace where we don't have permission.
  2325.         mkdir ${TESTDIR}/barf
  2326.         chmod -w ${TESTDIR}/barf
  2327. ***************
  2328. *** 7981,7986 ****
  2329. --- 8377,8385 ----
  2330.         chmod +w ${TESTDIR}/barf
  2331.         rmdir ${TESTDIR}/barf
  2332.         # Done.  Nothing to clean up.
  2333. +     else
  2334. +       echo "didn't run abspath-4 - CANT_PROTECT_DIRS"
  2335. +     fi
  2336.   
  2337.   
  2338.         # Try checking out two modules into the same directory.
  2339. ***************
  2340. *** 8072,8078 ****
  2341.         rm -r 1 2 3
  2342.   
  2343.         #
  2344. !       # FIXME: do other functions here (e.g. update /tmp/foo)
  2345.         #
  2346.   
  2347.         # Finished with all tests.  Remove the module.
  2348. --- 8471,8477 ----
  2349.         rm -r 1 2 3
  2350.   
  2351.         #
  2352. !       # FIXME: do other functions here (e.g. update ${TMPDIR}/foo)
  2353.         #
  2354.   
  2355.         # Finished with all tests.  Remove the module.
  2356. ***************
  2357. *** 8182,8187 ****
  2358. --- 8581,8587 ----
  2359.         dotest toplevel-11 "${testcvs} -q update -d second-dir" \
  2360.   "U second-dir/file2"
  2361.   
  2362. +     if test x"${CANT_PROTECT_DIRS}" = x; then
  2363.         # Now remove the CVS directory (people may do this manually,
  2364.         # especially if they formed their habits with CVS
  2365.         # 1.9 and older, which didn't create it.  Or perhaps the working
  2366. ***************
  2367. *** 8200,8205 ****
  2368. --- 8600,8608 ----
  2369.   ${PROG} [a-z]*: Updating top-dir"
  2370.   
  2371.         chmod +w ../1
  2372. +     else
  2373. +       echo "didn't run toplevel-12 - CANT_PROTECT_DIRS"
  2374. +     fi
  2375.   
  2376.         dotest toplevel-cleanup-1 "${testcvs} -q co CVSROOT/config" \
  2377.   "U CVSROOT/config"
  2378. ***************
  2379. *** 8376,8388 ****
  2380.         # can see the "CVS:" lines.
  2381.         cat >${TESTDIR}/editme <<EOF
  2382.   #!${TESTSHELL}
  2383. ! sleep 1
  2384. ! sed <\$1 -e 's/^/x/' >${TESTDIR}/edit.new
  2385. ! mv ${TESTDIR}/edit.new \$1
  2386.   exit 0
  2387.   EOF
  2388.         chmod +x ${TESTDIR}/editme
  2389.   
  2390.         mkdir 1; cd 1
  2391.         dotest editor-1 "${testcvs} -q co -l ." ''
  2392.         mkdir first-dir
  2393. --- 8779,8850 ----
  2394.         # can see the "CVS:" lines.
  2395.         cat >${TESTDIR}/editme <<EOF
  2396.   #!${TESTSHELL}
  2397. ! sleep 2
  2398. ! sed <\$1 -e 's/^/x&/g' >${TESTDIR}/edit.new
  2399. ! rm \$1
  2400. ! sleep 2
  2401. ! cp ${TESTDIR}/edit.new \$1
  2402. ! rm ${TESTDIR}/edit.new
  2403.   exit 0
  2404.   EOF
  2405. + # /* edhack.c */
  2406. + # #include <stdio.h>
  2407. + # #include <stdlib.h>
  2408. + # 
  2409. + # int main( int argc, const char * argv[] )
  2410. + # {
  2411. + #    static char editor[1024];
  2412. + #    const char * testdir;
  2413. + #    const char * testshell;
  2414. + #    int argi;
  2415. + # 
  2416. + #    int iRc = system( NULL );
  2417. + #    if (0 == iRc)
  2418. + #       {
  2419. + #       printf("Can't find a command processor to run system()\n");
  2420. + #       return 1;
  2421. + #       }
  2422. + # 
  2423. + #    testshell = getenv( "TESTSHELL" );
  2424. + #    if (testshell)
  2425. + #       {
  2426. + #       strcpy( editor, testshell );
  2427. + #       }
  2428. + #    else
  2429. + #       {
  2430. + #       strcpy( editor, "sh" );
  2431. + #       }
  2432. + #    strcat( editor, " ");
  2433. + # 
  2434. + #    testdir = getenv( "TESTDIR" );
  2435. + #    if (testdir)
  2436. + #       {
  2437. + #       strcat( editor, testdir );
  2438. + #       strcat( editor, "/" );
  2439. + #       }
  2440. + #    strcat( editor, "editme" );
  2441. + #    
  2442. + #    for (argi = 1; argi < argc; ++argi)
  2443. + #       {
  2444. + #       strcat(editor," ");
  2445. + #       strcat(editor, argv[argi] );
  2446. + #       }
  2447. + #    
  2448. + # /*   printf("about to run:\"%s\"\n", editor); */
  2449. + #    iRc = system( editor );
  2450. + #    return iRc;
  2451. + # }
  2452.         chmod +x ${TESTDIR}/editme
  2453.   
  2454. +       if test x"${EDHACK_EDITOR}" = x; then
  2455. +         EDITME_DO=${TESTDIR}/editme
  2456. +       else
  2457. +         EDITME_DO=edhack
  2458. +         export TESTDIR
  2459. +       fi
  2460.         mkdir 1; cd 1
  2461.         dotest editor-1 "${testcvs} -q co -l ." ''
  2462.         mkdir first-dir
  2463. ***************
  2464. *** 8394,8400 ****
  2465.   "${PROG} [a-z]*: scheduling file .file1. for addition
  2466.   ${PROG} [a-z]*: scheduling file .file2. for addition
  2467.   ${PROG} [a-z]*: use .${PROG} commit. to add these files permanently"
  2468. !       dotest editor-4 "${testcvs} -e ${TESTDIR}/editme -q ci" \
  2469.   "RCS file: ${TESTDIR}/cvsroot/first-dir/file1,v
  2470.   done
  2471.   Checking in file1;
  2472. --- 8856,8862 ----
  2473.   "${PROG} [a-z]*: scheduling file .file1. for addition
  2474.   ${PROG} [a-z]*: scheduling file .file2. for addition
  2475.   ${PROG} [a-z]*: use .${PROG} commit. to add these files permanently"
  2476. !       dotest editor-4 "${testcvs} -e ${EDITME_DO} -q ci" \
  2477.   "RCS file: ${TESTDIR}/cvsroot/first-dir/file1,v
  2478.   done
  2479.   Checking in file1;
  2480. ***************
  2481. *** 8407,8417 ****
  2482.   ${TESTDIR}/cvsroot/first-dir/file2,v  <--  file2
  2483.   initial revision: 1\.1
  2484.   done"
  2485.         dotest editor-5 "${testcvs} -q tag -b br" "T file1
  2486.   T file2"
  2487.         dotest editor-6 "${testcvs} -q update -r br" ''
  2488.         echo modify >>file1
  2489. !       dotest editor-7 "${testcvs} -e ${TESTDIR}/editme -q ci" \
  2490.   "Checking in file1;
  2491.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  2492.   new revision: 1\.1\.2\.1; previous revision: 1\.1
  2493. --- 8869,8882 ----
  2494.   ${TESTDIR}/cvsroot/first-dir/file2,v  <--  file2
  2495.   initial revision: 1\.1
  2496.   done"
  2497. +       sleep ${FILESYSTEM_TICK}
  2498.         dotest editor-5 "${testcvs} -q tag -b br" "T file1
  2499.   T file2"
  2500. +       sleep ${FILESYSTEM_TICK}
  2501.         dotest editor-6 "${testcvs} -q update -r br" ''
  2502. +       sleep ${FILESYSTEM_TICK}
  2503.         echo modify >>file1
  2504. !       dotest editor-7 "${testcvs} -e ${EDITME_DO} -q ci" \
  2505.   "Checking in file1;
  2506.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  2507.   new revision: 1\.1\.2\.1; previous revision: 1\.1
  2508. ***************
  2509. *** 8422,8429 ****
  2510.         # already on the branch.  If there were a revision on the branch,
  2511.         # CVS would correctly give an up-to-date check failed.
  2512.         dotest editor-8 "${testcvs} -q update -A" "U file1"
  2513.         echo add a line >>file2
  2514. !       dotest editor-9 "${testcvs} -q -e ${TESTDIR}/editme ci -rbr file2" \
  2515.   "Checking in file2;
  2516.   ${TESTDIR}/cvsroot/first-dir/file2,v  <--  file2
  2517.   new revision: 1\.1\.2\.1; previous revision: 1\.1
  2518. --- 8887,8895 ----
  2519.         # already on the branch.  If there were a revision on the branch,
  2520.         # CVS would correctly give an up-to-date check failed.
  2521.         dotest editor-8 "${testcvs} -q update -A" "U file1"
  2522. +       sleep ${FILESYSTEM_TICK}
  2523.         echo add a line >>file2
  2524. !       dotest editor-9 "${testcvs} -q -e ${EDITME_DO} ci -rbr file2" \
  2525.   "Checking in file2;
  2526.   ${TESTDIR}/cvsroot/first-dir/file2,v  <--  file2
  2527.   new revision: 1\.1\.2\.1; previous revision: 1\.1
  2528. ***************
  2529. *** 8590,8595 ****
  2530. --- 9056,9062 ----
  2531.         fi
  2532.   
  2533.         cd ../../2/1dir
  2534. +     if test x"${CANT_PROTECT_DIRS}" = x; then
  2535.         # FIXME: should be using dotest.
  2536.         ${testcvs} -q update 2>../tst167.err
  2537.         cat ../tst167.err >>${LOGFILE}
  2538. ***************
  2539. *** 8604,8609 ****
  2540. --- 9071,9079 ----
  2541.         else
  2542.             fail 168
  2543.         fi
  2544. +     else
  2545. +       echo "didn't run 168 (errmsg1) - CANT_PROTECT_DIRS"
  2546. +     fi
  2547.   
  2548.         cd ..
  2549.         chmod u+w 1dir
  2550. ***************
  2551. *** 8807,8812 ****
  2552. --- 9277,9283 ----
  2553.             pass 178a
  2554.         fi
  2555.   
  2556. +       sleep ${FILESYSTEM_TICK}
  2557.         if ${testcvs} edit abb; then
  2558.             pass 179
  2559.         else
  2560. ***************
  2561. *** 8825,8830 ****
  2562. --- 9296,9302 ----
  2563.             fail 181
  2564.         fi
  2565.   
  2566. +       sleep ${FILESYSTEM_TICK}
  2567.         echo aaaa >>abb
  2568.         if ${testcvs} ci -m modify abb >>${LOGFILE} 2>&1; then
  2569.             pass 182
  2570. ***************
  2571. *** 8846,8857 ****
  2572.             pass 184
  2573.         fi
  2574.   
  2575. !       if test -w abb; then
  2576. !           fail 185
  2577.         else
  2578. !           pass 185
  2579.         fi
  2580.   
  2581.         if ${testcvs} edit abc; then
  2582.             pass 186a1
  2583.         else
  2584. --- 9318,9332 ----
  2585.             pass 184
  2586.         fi
  2587.   
  2588. !       if test "x${OS_COMPILER_EMU}" = xwin32_msvc_cygwin32; then
  2589. !           echo 'devcom: (cygwin32 b19.1 test -w strange) - using attrib'
  2590. !           dotest 185 "attrib abb"  "A    R ${DOTSTAR}"
  2591.         else
  2592. !           dotest_fail 185 "test -w abb" ''
  2593.         fi
  2594.   
  2595.         if ${testcvs} edit abc; then
  2596.             pass 186a1
  2597.         else
  2598. ***************
  2599. *** 8868,8873 ****
  2600. --- 9343,9349 ----
  2601.         else
  2602.             fail 186a3
  2603.         fi
  2604. +       sleep ${FILESYSTEM_TICK}
  2605.         echo changedabc >abc
  2606.         # Try to unedit a modified file; cvs should ask for confirmation
  2607.         if (echo no | ${testcvs} unedit abc) >>${LOGFILE}; then
  2608. ***************
  2609. *** 8964,8971 ****
  2610.         cd 3
  2611.         dotest devcom-some1 "${testcvs} -q co first-dir" 'U first-dir/abb
  2612.   U first-dir/abc'
  2613. !       dotest devcom-some2 "test -w first-dir/abb" ''
  2614. !       dotest_fail devcom-some3 "test -w first-dir/abc" ''
  2615.         cd ..
  2616.   
  2617.         if test "$keep" = yes; then
  2618. --- 9440,9453 ----
  2619.         cd 3
  2620.         dotest devcom-some1 "${testcvs} -q co first-dir" 'U first-dir/abb
  2621.   U first-dir/abc'
  2622. !       if test "x${OS_COMPILER_EMU}" = xwin32_msvc_cygwin32; then
  2623. !         echo 'devcom: cygwin32 b19.1 test -w is very weird - using attrib instead'
  2624. !         dotest devcom-some2 "attrib first-dir\\abb" "A      ${DOTSTAR}"
  2625. !         dotest devcom-some2 "attrib first-dir\\abc" "A    R ${DOTSTAR}"
  2626. !       else
  2627. !         dotest devcom-some2 "test -w first-dir/abb" ''
  2628. !         dotest_fail devcom-some3 "test -w first-dir/abc" ''
  2629. !       fi
  2630.         cd ..
  2631.   
  2632.         if test "$keep" = yes; then
  2633. ***************
  2634. *** 9020,9029 ****
  2635.   U first-dir/w1
  2636.   U first-dir/w2
  2637.   U first-dir/w3'
  2638. !       dotest devcom2-8 "test -w first-dir/nw1" ''
  2639. !       dotest_fail devcom2-9 "test -w first-dir/w1" ''
  2640. !       dotest_fail devcom2-10 "test -w first-dir/w2" ''
  2641. !       dotest_fail devcom2-11 "test -w first-dir/w3" ''
  2642.   
  2643.         cd first-dir
  2644.         # OK, now we want to try files in various states with cvs edit.
  2645. --- 9502,9519 ----
  2646.   U first-dir/w1
  2647.   U first-dir/w2
  2648.   U first-dir/w3'
  2649. !       if test "x${OS_COMPILER_EMU}" = xwin32_msvc_cygwin32; then
  2650. !         echo 'devcom2: cygwin32 b19.1 test -w is very weird - using attrib instead'
  2651. !         dotest devcom2-8 "attrib first-dir\\nw1" "A      ${DOTSTAR}"
  2652. !         dotest devcom2-9 "attrib first-dir\\w1" "A    R ${DOTSTAR}"
  2653. !         dotest devcom2-10 "attrib first-dir\\w2" "A    R ${DOTSTAR}"
  2654. !         dotest devcom2-11 "attrib first-dir\\w3" "A    R ${DOTSTAR}"
  2655. !       else
  2656. !         dotest devcom2-8 "test -w first-dir/nw1" ''
  2657. !         dotest_fail devcom2-9 "test -w first-dir/w1" ''
  2658. !         dotest_fail devcom2-10 "test -w first-dir/w2" ''
  2659. !         dotest_fail devcom2-11 "test -w first-dir/w3" ''
  2660. !       fi
  2661.   
  2662.         cd first-dir
  2663.         # OK, now we want to try files in various states with cvs edit.
  2664. ***************
  2665. *** 9164,9175 ****
  2666. --- 9654,9669 ----
  2667.         dotest_fail watch4-8 "test -w first-dir/file1" ''
  2668.         dotest_fail watch4-9 "test -w first-dir/subdir/sfile" ''
  2669.         cd first-dir
  2670. +       sleep ${FILESYSTEM_TICK}
  2671.         dotest watch4-10 "${testcvs} edit file1" ''
  2672. +       sleep ${FILESYSTEM_TICK}
  2673.         echo 'edited in 2' >file1
  2674.         cd ../..
  2675.   
  2676.         cd 1/first-dir
  2677. +       sleep ${FILESYSTEM_TICK}
  2678.         dotest watch4-11 "${testcvs} edit file1" ''
  2679. +       sleep ${FILESYSTEM_TICK}
  2680.         echo 'edited in 1' >file1
  2681.         dotest watch4-12 "${testcvs} -q ci -m edit-in-1" \
  2682.   "Checking in file1;
  2683. ***************
  2684. *** 9230,9236 ****
  2685.         if echo "yes" | ${testcvs} -Q unedit $file \
  2686.           >${TESTDIR}/test.tmp 2>&1 ; then
  2687.           dotest unedit-without-baserev-4 "cat ${TESTDIR}/test.tmp" \
  2688. ! "m has been modified; revert changes? ${PROG} unedit: m not mentioned in CVS/Baserev
  2689.   ${PROG} unedit: run update to complete the unedit"
  2690.         else
  2691.           fail unedit-without-baserev-4
  2692. --- 9724,9730 ----
  2693.         if echo "yes" | ${testcvs} -Q unedit $file \
  2694.           >${TESTDIR}/test.tmp 2>&1 ; then
  2695.           dotest unedit-without-baserev-4 "cat ${TESTDIR}/test.tmp" \
  2696. ! "m has been modified; revert changes. ${PROG} unedit: m not mentioned in CVS/Baserev
  2697.   ${PROG} unedit: run update to complete the unedit"
  2698.         else
  2699.           fail unedit-without-baserev-4
  2700. ***************
  2701. *** 9238,9245 ****
  2702.   
  2703.         # SunOS4.1.4 systems make it this far, but with a corrupted
  2704.         # CVS/Entries file.  Demonstrate the corruption!
  2705. !       dotest unedit-without-baserev-5 "cat CVS/Entries" \
  2706. !         "/$file/1\.1\.1\.1/.*"
  2707.   
  2708.         if test "$remote" = yes; then
  2709.           dotest unedit-without-baserev-6 "${testcvs} -q update" "U m"
  2710. --- 9732,9739 ----
  2711.   
  2712.         # SunOS4.1.4 systems make it this far, but with a corrupted
  2713.         # CVS/Entries file.  Demonstrate the corruption!
  2714. !       #dotest unedit-without-baserev-5 "cat CVS/Entries" \
  2715. !       #  "/$file/1\.1\.1\.1/.*"
  2716.   
  2717.         if test "$remote" = yes; then
  2718.           dotest unedit-without-baserev-6 "${testcvs} -q update" "U m"
  2719. ***************
  2720. *** 9284,9290 ****
  2721.         rm CVS/Baserev
  2722.         if (echo yes | ${testcvs} unedit m) >${TESTDIR}/test.tmp 2>&1; then
  2723.           dotest unedit-without-baserev-14 "cat ${TESTDIR}/test.tmp" \
  2724. ! "m has been modified; revert changes? ${PROG} unedit: m not mentioned in CVS/Baserev
  2725.   ${PROG} unedit: run update to complete the unedit"
  2726.         else
  2727.           fail unedit-without-baserev-14
  2728. --- 9778,9784 ----
  2729.         rm CVS/Baserev
  2730.         if (echo yes | ${testcvs} unedit m) >${TESTDIR}/test.tmp 2>&1; then
  2731.           dotest unedit-without-baserev-14 "cat ${TESTDIR}/test.tmp" \
  2732. ! "m has been modified; revert changes. ${PROG} unedit: m not mentioned in CVS/Baserev
  2733.   ${PROG} unedit: run update to complete the unedit"
  2734.         else
  2735.           fail unedit-without-baserev-14
  2736. ***************
  2737. *** 9472,9477 ****
  2738. --- 9966,9972 ----
  2739.           </dev/null >binfile.dat
  2740.         cat binfile.dat binfile.dat >binfile2.dat
  2741.         cd first-dir
  2742. +       sleep ${FILESYSTEM_TICK}
  2743.         cp ../binfile.dat binfile
  2744.         dotest binfiles-2 "${testcvs} add -kb binfile" \
  2745.   "${PROG}"' [a-z]*: scheduling file `binfile'\'' for addition
  2746. ***************
  2747. *** 9522,9527 ****
  2748. --- 10017,10023 ----
  2749.         rm -r 3
  2750.         cd 2/first-dir
  2751.   
  2752. +       sleep ${FILESYSTEM_TICK}
  2753.         cp ../../1/binfile2.dat binfile
  2754.         dotest binfiles-6 "${testcvs} -q ci -m modify-it" \
  2755.   "Checking in binfile;
  2756. ***************
  2757. *** 9533,9538 ****
  2758. --- 10029,10035 ----
  2759.         dotest binfiles-8 "cmp ../binfile2.dat binfile" ''
  2760.   
  2761.         # Now test handling of conflicts with binary files.
  2762. +       sleep ${FILESYSTEM_TICK}
  2763.         cp ../binfile.dat binfile
  2764.         dotest binfiles-con0 "${testcvs} -q ci -m modify-it" \
  2765.   "Checking in binfile;
  2766. ***************
  2767. *** 9540,9545 ****
  2768. --- 10037,10043 ----
  2769.   new revision: 1\.3; previous revision: 1\.2
  2770.   done"
  2771.         cd ../../2/first-dir
  2772. +       sleep ${FILESYSTEM_TICK}
  2773.         echo 'edits in dir 2' >binfile
  2774.         dotest binfiles-con1 "${testcvs} -q update" \
  2775.   "U binfile
  2776. ***************
  2777. *** 9550,9555 ****
  2778. --- 10048,10054 ----
  2779.         dotest binfiles-con2 "cmp binfile ../../1/binfile.dat" ''
  2780.         dotest binfiles-con3 "cat .#binfile.1.2" 'edits in dir 2'
  2781.   
  2782. +       sleep ${FILESYSTEM_TICK}
  2783.         cp ../../1/binfile2.dat binfile
  2784.         dotest binfiles-con4 "${testcvs} -q ci -m resolve-it" \
  2785.   "Checking in binfile;
  2786. ***************
  2787. *** 9586,9592 ****
  2788. --- 10085,10093 ----
  2789.         rm -r 3
  2790.   
  2791.         cd 2/first-dir
  2792. +       sleep ${FILESYSTEM_TICK}
  2793.         echo 'this file is $''RCSfile$' >binfile
  2794. +       lf_endlines binfile
  2795.         dotest binfiles-14a "${testcvs} -q ci -m modify-it" \
  2796.   "Checking in binfile;
  2797.   ${TESTDIR}/cvsroot/first-dir/binfile,v  <--  binfile
  2798. ***************
  2799. *** 9771,9784 ****
  2800. --- 10272,10288 ----
  2801.   ${TESTDIR}/cvsroot/first-dir/brmod-wdmod,v  <--  brmod-wdmod
  2802.   initial revision: 1\.1
  2803.   done"
  2804. +       sleep ${FILESYSTEM_TICK}
  2805.         dotest binfiles2-2 "${testcvs} -q tag -b br" 'T brmod
  2806.   T brmod-trmod
  2807.   T brmod-wdmod'
  2808. +       sleep ${FILESYSTEM_TICK}
  2809.         dotest binfiles2-3 "${testcvs} -q update -r br" ''
  2810.         cp ../binfile binfile.dat
  2811.         dotest binfiles2-4 "${testcvs} add -kb binfile.dat" \
  2812.   "${PROG} [a-z]*: scheduling file .binfile\.dat. for addition on branch .br.
  2813.   ${PROG} [a-z]*: use .${PROG} commit. to add this file permanently"
  2814. +       sleep ${FILESYSTEM_TICK}
  2815.         cp ../binfile2 brmod
  2816.         cp ../binfile2 brmod-trmod
  2817.         cp ../binfile2 brmod-wdmod
  2818. ***************
  2819. *** 9808,9819 ****
  2820. --- 10312,10325 ----
  2821.   [UP] brmod-wdmod"
  2822.         dotest_fail binfiles2-7 "test -f binfile.dat" ''
  2823.         dotest binfiles2-7-brmod "cmp ../binfile brmod"
  2824. +       sleep ${FILESYSTEM_TICK}
  2825.         cp ../binfile3 brmod-trmod
  2826.         dotest binfiles2-7a "${testcvs} -q ci -m tr-modify" \
  2827.   "Checking in brmod-trmod;
  2828.   ${TESTDIR}/cvsroot/first-dir/brmod-trmod,v  <--  brmod-trmod
  2829.   new revision: 1\.2; previous revision: 1\.1
  2830.   done"
  2831. +       sleep ${FILESYSTEM_TICK}
  2832.         cp ../binfile3 brmod-wdmod
  2833.   
  2834.         dotest binfiles2-8 "${testcvs} -q update -j br" \
  2835. ***************
  2836. *** 9963,9973 ****
  2837. --- 10469,10482 ----
  2838.         # both.
  2839.         CVSWRAPPERS="* -m 'COPY'"
  2840.         export CVSWRAPPERS
  2841. +       sleep ${FILESYSTEM_TICK}
  2842.         dotest mcopy-2 "${testcvs} -q tag -b br" 'T \.cvswrappers
  2843.   T brmod
  2844.   T brmod-trmod
  2845.   T brmod-wdmod'
  2846. +       sleep ${FILESYSTEM_TICK}
  2847.         dotest mcopy-3 "${testcvs} -q update -r br" ''
  2848. +       sleep ${FILESYSTEM_TICK}
  2849.         echo 'modify brmod on br' >brmod
  2850.         echo 'modify brmod-trmod on br' >brmod-trmod
  2851.         echo 'modify brmod-wdmod on br' >brmod-wdmod
  2852. ***************
  2853. *** 9984,9989 ****
  2854. --- 10493,10499 ----
  2855.   ${TESTDIR}/cvsroot/first-dir/brmod-wdmod,v  <--  brmod-wdmod
  2856.   new revision: 1\.1\.2\.1; previous revision: 1\.1
  2857.   done"
  2858. +       sleep ${FILESYSTEM_TICK}
  2859.         dotest mcopy-6 "${testcvs} -q update -A" \
  2860.   "[UP] brmod
  2861.   [UP] brmod-trmod
  2862. ***************
  2863. *** 9993,10004 ****
  2864. --- 10503,10516 ----
  2865.   brmod-trmod initial contents
  2866.   brmod-wdmod initial contents"
  2867.   
  2868. +       sleep ${FILESYSTEM_TICK}
  2869.         echo 'modify brmod-trmod again on trunk' >brmod-trmod
  2870.         dotest mcopy-7a "${testcvs} -q ci -m tr-modify" \
  2871.   "Checking in brmod-trmod;
  2872.   ${TESTDIR}/cvsroot/first-dir/brmod-trmod,v  <--  brmod-trmod
  2873.   new revision: 1\.2; previous revision: 1\.1
  2874.   done"
  2875. +       sleep ${FILESYSTEM_TICK}
  2876.         echo 'modify brmod-wdmod in working dir' >brmod-wdmod
  2877.   
  2878.         dotest mcopy-8 "${testcvs} -q update -j br" \
  2879. ***************
  2880. *** 10239,10244 ****
  2881. --- 10751,10757 ----
  2882.             # This destroys anything currently in cvswrappers, but
  2883.         # presumably other tests will take care of it themselves if
  2884.         # they use cvswrappers:
  2885. +       sleep ${FILESYSTEM_TICK}
  2886.         echo "foo*.sb  -k 'b'" > cvswrappers
  2887.         dotest binwrap3-2 "${testcvs} -q ci -m cvswrappers-mod" \
  2888.   "Checking in cvswrappers;
  2889. ***************
  2890. *** 10398,10403 ****
  2891. --- 10911,10917 ----
  2892.   
  2893.         dotest mwrap-c1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
  2894.         cd CVSROOT
  2895. +       sleep ${FILESYSTEM_TICK}
  2896.         echo "* -m 'COPY'" >>cvswrappers
  2897.         dotest mwrap-c2 "${testcvs} -q ci -m wrapper-mod" \
  2898.   "Checking in cvswrappers;
  2899. ***************
  2900. *** 10427,10432 ****
  2901. --- 10941,10947 ----
  2902.         mkdir m2; cd m2
  2903.         dotest mwrap-5 "${testcvs} -q co first-dir" "U first-dir/aa"
  2904.         cd first-dir
  2905. +       sleep ${FILESYSTEM_TICK}
  2906.         echo "changed in m2" >aa
  2907.         dotest mwrap-6 "${testcvs} -q ci -m m2-mod" \
  2908.   "Checking in aa;
  2909. ***************
  2910. *** 10480,10493 ****
  2911.   
  2912.         dotest info-1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
  2913.         cd CVSROOT
  2914.         echo "ALL sh -c \"echo x\${=MYENV}\${=OTHER}y\${=ZEE}=\$USER=\$CVSROOT= >>$TESTDIR/testlog; cat >/dev/null\"" > loginfo
  2915.             # The following cases test the format string substitution
  2916. !           echo "ALL echo %{sVv} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2917. !           echo "ALL echo %{v} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2918. !           echo "ALL echo %s >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2919. !           echo "ALL echo %{V}AX >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2920. !           echo "first-dir echo %sux >>$TESTDIR/testlog2; cat >/dev/null" \
  2921. !             >> loginfo
  2922.   
  2923.         # Might be nice to move this to crerepos tests; it should
  2924.         # work to create a loginfo file if you didn't create one
  2925. --- 10995,11018 ----
  2926.   
  2927.         dotest info-1 "${testcvs} -q co CVSROOT" "[UP] CVSROOT${DOTSTAR}"
  2928.         cd CVSROOT
  2929. +       sleep ${FILESYSTEM_TICK}
  2930.         echo "ALL sh -c \"echo x\${=MYENV}\${=OTHER}y\${=ZEE}=\$USER=\$CVSROOT= >>$TESTDIR/testlog; cat >/dev/null\"" > loginfo
  2931.             # The following cases test the format string substitution
  2932. !        if test x"${CANT_RUN_SCRIPTS}" = x; then
  2933. !            echo "ALL echo %{sVv} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2934. !            echo "ALL echo %{v} >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2935. !            echo "ALL echo %s >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2936. !            echo "ALL echo %{V}AX >>$TESTDIR/testlog2; cat >/dev/null" >> loginfo
  2937. !            echo "first-dir echo %sux >>$TESTDIR/testlog2; cat >/dev/null" \
  2938. !               >> loginfo
  2939. !       else
  2940. !         echo "ALL ${TESTSHELL} -c \"echo %{sVv} >>$TESTDIR/testlog2; cat >/dev/null\"" >> loginfo
  2941. !         echo "ALL ${TESTSHELL} -c \"echo %{v} >>$TESTDIR/testlog2; cat >/dev/null\"" >> loginfo
  2942. !         echo "ALL ${TESTSHELL} -c \"echo %s >>$TESTDIR/testlog2; cat >/dev/null\"" >> loginfo
  2943. !         echo "ALL ${TESTSHELL} -c \"echo %{V}AX >>$TESTDIR/testlog2; cat >/dev/null\"" >> loginfo
  2944. !         echo "first-dir ${TESTSHELL} -c \"echo %sux >>$TESTDIR/testlog2; cat >/dev/null\"" \
  2945. !               >> loginfo
  2946. !       fi
  2947.   
  2948.         # Might be nice to move this to crerepos tests; it should
  2949.         # work to create a loginfo file if you didn't create one
  2950. ***************
  2951. *** 10520,10526 ****
  2952. --- 11045,11053 ----
  2953.   initial revision: 1\.1
  2954.   done
  2955.   ${PROG} [a-z]*: loginfo:1: no such user variable \${=ZEE}"
  2956. +       sleep ${FILESYSTEM_TICK}
  2957.         echo line1 >>file1
  2958. + #      dotest info-7 "${testcvs} -t -s OTHER=value -s ZEE=z ci -m mod-it" \
  2959.         dotest info-7 "${testcvs} -q -s OTHER=value -s ZEE=z ci -m mod-it" \
  2960.   "Checking in file1;
  2961.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  2962. ***************
  2963. *** 10528,10533 ****
  2964. --- 11055,11067 ----
  2965.   done"
  2966.         cd ..
  2967.         dotest info-9 "cat $TESTDIR/testlog" "xenv-valueyz=${username}=${TESTDIR}/cvsroot="
  2968. +       # Windows-NT, Microsoft Visual C++ 4.2 does badly on info-10
  2969. +       # for files that have %{sVv} substitutions.
  2970. +       # src/logmsg.c(logfile_write) puts apostrophe around strings,
  2971. +       # windows-NT/run.c(requote) changes these to quote.
  2972. +       # windows-NT/run.c(run_popen) passes these to CMD.EXE.
  2973. +       # 
  2974.             dotest info-10 "cat $TESTDIR/testlog2" 'first-dir file1,NONE,1.1
  2975.   first-dir 1.1
  2976.   first-dir file1
  2977. ***************
  2978. *** 10540,10545 ****
  2979. --- 11074,11080 ----
  2980.   first-dir file1ux'
  2981.   
  2982.         cd CVSROOT
  2983. +       sleep ${FILESYSTEM_TICK}
  2984.         echo '# do nothing' >loginfo
  2985.         dotest info-11 "${testcvs} -q -s ZEE=garbage ci -m nuke-loginfo" \
  2986.   "Checking in loginfo;
  2987. ***************
  2988. *** 10559,10565 ****
  2989.   fi
  2990.   EOF
  2991.         chmod +x ${TESTDIR}/vscript
  2992. !       echo "^first-dir ${TESTDIR}/vscript" >>verifymsg
  2993.         dotest info-v1 "${testcvs} -q ci -m add-verification" \
  2994.   "Checking in verifymsg;
  2995.   ${TESTDIR}/cvsroot/CVSROOT/verifymsg,v  <--  verifymsg
  2996. --- 11094,11104 ----
  2997.   fi
  2998.   EOF
  2999.         chmod +x ${TESTDIR}/vscript
  3000. !       if test x"${CANT_RUN_SCRIPTS}" = x; then
  3001. !         echo "^first-dir ${TESTDIR}/vscript" >>verifymsg
  3002. !       else
  3003. !         echo "^first-dir ${TESTSHELL} ${TESTDIR}/vscript" >>verifymsg
  3004. !       fi
  3005.         dotest info-v1 "${testcvs} -q ci -m add-verification" \
  3006.   "Checking in verifymsg;
  3007.   ${TESTDIR}/cvsroot/CVSROOT/verifymsg,v  <--  verifymsg
  3008. ***************
  3009. *** 10595,10600 ****
  3010. --- 11134,11140 ----
  3011.         rmdir another-dir
  3012.   
  3013.         cd CVSROOT
  3014. +       sleep ${FILESYSTEM_TICK}
  3015.         echo '# do nothing' >verifymsg
  3016.         dotest info-cleanup-verifymsg "${testcvs} -q ci -m nuke-verifymsg" \
  3017.   "Checking in verifymsg;
  3018. ***************
  3019. *** 10739,10744 ****
  3020. --- 11279,11285 ----
  3021.   
  3022.         dotest config-1 "${testcvs} -q co CVSROOT" "U CVSROOT/${DOTSTAR}"
  3023.         cd CVSROOT
  3024. +       sleep ${FILESYSTEM_TICK}
  3025.         echo 'bogus line' >config
  3026.         # We can't rely on specific revisions, since other tests
  3027.         # might need to modify CVSROOT/config
  3028. ***************
  3029. *** 10748,10753 ****
  3030. --- 11289,11295 ----
  3031.   new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
  3032.   done
  3033.   ${PROG} [a-z]*: Rebuilding administrative file database"
  3034. +       sleep ${FILESYSTEM_TICK}
  3035.         echo 'BogusOption=yes' >config
  3036.         dotest config-4 "${testcvs} -q ci -m change-to-bogus-opt" \
  3037.   "${PROG} [a-z]*: syntax error in ${TESTDIR}/cvsroot/CVSROOT/config: line 'bogus line' is missing '='
  3038. ***************
  3039. *** 10756,10761 ****
  3040. --- 11298,11304 ----
  3041.   new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
  3042.   done
  3043.   ${PROG} [a-z]*: Rebuilding administrative file database"
  3044. +       sleep ${FILESYSTEM_TICK}
  3045.         echo '# No config is a good config' > config
  3046.         dotest config-5 "${testcvs} -q ci -m change-to-comment" \
  3047.   "${PROG} [a-z]*: ${TESTDIR}/cvsroot/CVSROOT/config: unrecognized keyword 'BogusOption'
  3048. ***************
  3049. *** 10874,10879 ****
  3050. --- 11417,11423 ----
  3051.   done"
  3052.         rm -f ${TESTDIR}/comment.tmp
  3053.   
  3054. +       sleep ${FILESYSTEM_TICK}
  3055.         echo 'second revision' > file1
  3056.         dotest log-4 "${testcvs} -q ci -m2 file1" \
  3057.   "Checking in file1;
  3058. ***************
  3059. *** 10881,10888 ****
  3060. --- 11425,11434 ----
  3061.   new revision: 1\.2; previous revision: 1\.1
  3062.   done"
  3063.   
  3064. +       sleep ${FILESYSTEM_TICK}
  3065.         dotest log-5 "${testcvs} -q tag -b branch file1" 'T file1'
  3066.   
  3067. +       sleep ${FILESYSTEM_TICK}
  3068.         echo 'third revision' > file1
  3069.         dotest log-6 "${testcvs} -q ci -m3 file1" \
  3070.   "Checking in file1;
  3071. ***************
  3072. *** 10890,10897 ****
  3073. --- 11436,11445 ----
  3074.   new revision: 1\.3; previous revision: 1\.2
  3075.   done"
  3076.   
  3077. +       sleep ${FILESYSTEM_TICK}
  3078.         dotest log-7 "${testcvs} -q update -r branch" '[UP] file1'
  3079.   
  3080. +       sleep ${FILESYSTEM_TICK}
  3081.         echo 'first branch revision' > file1
  3082.         dotest log-8 "${testcvs} -q ci -m1b file1" \
  3083.   "Checking in file1;
  3084. ***************
  3085. *** 10901,10906 ****
  3086. --- 11449,11455 ----
  3087.   
  3088.         dotest log-9 "${testcvs} -q tag tag file1" 'T file1'
  3089.   
  3090. +       sleep ${FILESYSTEM_TICK}
  3091.         echo 'second branch revision' > file1
  3092.         dotest log-10 "${testcvs} -q ci -m2b file1" \
  3093.   "Checking in file1;
  3094. ***************
  3095. *** 11252,11257 ****
  3096. --- 11801,11807 ----
  3097.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  3098.   initial revision: 1\.1
  3099.   done"
  3100. +       sleep ${FILESYSTEM_TICK}
  3101.         cat >file1 <<EOF
  3102.   this
  3103.   is
  3104. ***************
  3105. *** 11268,11274 ****
  3106. --- 11818,11826 ----
  3107.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  3108.   new revision: 1\.2; previous revision: 1\.1
  3109.   done"
  3110. +       sleep ${FILESYSTEM_TICK}
  3111.         dotest ann-6 "${testcvs} -q tag -b br" "T file1"
  3112. +       sleep ${FILESYSTEM_TICK}
  3113.         cat >file1 <<EOF
  3114.   this
  3115.   is
  3116. ***************
  3117. *** 11285,11291 ****
  3118. --- 11837,11845 ----
  3119.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  3120.   new revision: 1\.3; previous revision: 1\.2
  3121.   done"
  3122. +       sleep ${FILESYSTEM_TICK}
  3123.         dotest ann-8 "${testcvs} -q update -r br" "[UP] file1"
  3124. +       sleep ${FILESYSTEM_TICK}
  3125.         cat >file1 <<EOF
  3126.   this
  3127.   is
  3128. ***************
  3129. *** 11416,11434 ****
  3130.   
  3131.           # First, if the repository doesn't exist at all...
  3132.           dotest_fail crerepos-1 \
  3133. ! "${testcvs} -d ${TESTDIR}/crerepos co cvs-sanity" \
  3134.   "${PROG} \[[a-z]* aborted\]: ${TESTDIR}/crerepos/CVSROOT: .*"
  3135.           mkdir crerepos
  3136.   
  3137.           # The repository exists but CVSROOT doesn't.
  3138.           dotest_fail crerepos-2 \
  3139. ! "${testcvs} -d ${TESTDIR}/crerepos co cvs-sanity" \
  3140.   "${PROG} \[[a-z]* aborted\]: ${TESTDIR}/crerepos/CVSROOT: .*"
  3141.           mkdir crerepos/CVSROOT
  3142.   
  3143.           # Checkout of nonexistent module
  3144.           dotest_fail crerepos-3 \
  3145. ! "${testcvs} -d ${TESTDIR}/crerepos co cvs-sanity" \
  3146.   "${PROG} [a-z]*: cannot find module .cvs-sanity. - ignored"
  3147.   
  3148.           # Now test that CVS works correctly without a modules file
  3149. --- 11970,11988 ----
  3150.   
  3151.           # First, if the repository doesn't exist at all...
  3152.           dotest_fail crerepos-1 \
  3153. ! "${testcvs} -d :local:${TESTDIR}/crerepos co cvs-sanity" \
  3154.   "${PROG} \[[a-z]* aborted\]: ${TESTDIR}/crerepos/CVSROOT: .*"
  3155.           mkdir crerepos
  3156.   
  3157.           # The repository exists but CVSROOT doesn't.
  3158.           dotest_fail crerepos-2 \
  3159. ! "${testcvs} -d :local:${TESTDIR}/crerepos co cvs-sanity" \
  3160.   "${PROG} \[[a-z]* aborted\]: ${TESTDIR}/crerepos/CVSROOT: .*"
  3161.           mkdir crerepos/CVSROOT
  3162.   
  3163.           # Checkout of nonexistent module
  3164.           dotest_fail crerepos-3 \
  3165. ! "${testcvs} -d :local:${TESTDIR}/crerepos co cvs-sanity" \
  3166.   "${PROG} [a-z]*: cannot find module .cvs-sanity. - ignored"
  3167.   
  3168.           # Now test that CVS works correctly without a modules file
  3169. ***************
  3170. *** 11438,11447 ****
  3171.           # been created with an old version of CVS.
  3172.           mkdir tmp; cd tmp
  3173.           dotest crerepos-4 \
  3174. ! "${testcvs} -q -d ${TESTDIR}/crerepos co CVSROOT" \
  3175.   ''
  3176.           if echo yes | \
  3177. ! ${testcvs} -d ${TESTDIR}/crerepos release -d CVSROOT >>${LOGFILE}; then
  3178.             pass crerepos-5
  3179.           else
  3180.             fail crerepos-5
  3181. --- 11992,12001 ----
  3182.           # been created with an old version of CVS.
  3183.           mkdir tmp; cd tmp
  3184.           dotest crerepos-4 \
  3185. ! "${testcvs} -q -d :local:${TESTDIR}/crerepos co CVSROOT" \
  3186.   ''
  3187.           if echo yes | \
  3188. ! ${testcvs} -d :local:${TESTDIR}/crerepos release -d CVSROOT >>${LOGFILE}; then
  3189.             pass crerepos-5
  3190.           else
  3191.             fail crerepos-5
  3192. ***************
  3193. *** 11451,11457 ****
  3194.           # The directory tmp should be empty
  3195.           dotest crerepos-6 "rmdir tmp" ''
  3196.   
  3197. !         CREREPOS_ROOT=${TESTDIR}/crerepos
  3198.   
  3199.         else
  3200.           # For remote, just create the repository.  We don't yet do
  3201. --- 12005,12011 ----
  3202.           # The directory tmp should be empty
  3203.           dotest crerepos-6 "rmdir tmp" ''
  3204.   
  3205. !         CREREPOS_ROOT=:local:${TESTDIR}/crerepos
  3206.   
  3207.         else
  3208.           # For remote, just create the repository.  We don't yet do
  3209. ***************
  3210. *** 11675,11680 ****
  3211. --- 12229,12235 ----
  3212.   @d2 12
  3213.   @
  3214.   EOF
  3215. +       lf_endlines ${CVSROOT_DIRNAME}/first-dir/file1,v
  3216.         dotest rcs-1 "${testcvs} -q co first-dir" 'U first-dir/file1'
  3217.         cd first-dir
  3218.         dotest rcs-2 "${testcvs} -q log" "
  3219. ***************
  3220. *** 11784,11789 ****
  3221. --- 12339,12367 ----
  3222.         # doc/RCSFILES and friends.  One subtle point is that none of
  3223.         # the lines end with newlines; that is a feature which we
  3224.         # should be testing.
  3225. +       # Windows-NT, Microsoft Visual C++ 4.2, Novell IntraNetware
  3226. +       # Client 4.11a does badly on rcs-5 when the /tmp is on Netware
  3227. +       # server.
  3228. +       # src/vers-ts.c(Version-TS) does utime (finfo->file, &t) with
  3229. +       # t.actime = t.modtime = 31564805 which causes modified time 
  3230. +       # of file2 to be set to 1 jan 2099 (rather than 1 jan 1971).
  3231. +       # Looks to me like Netware counts file times from 1 jan 1980 0:0:0.
  3232. +       # Here is some mush to use dates in 1980 rather than 1971 when
  3233. +       # it looks like we have Netware
  3234. +       DECADE="7"
  3235. +       if touch -t123123591979.59 netware; then
  3236. +         if $EXPR "`ls -l netware`" : \
  3237. +            "${DOTSTAR}1979${DOTSTAR}" >/dev/null; then
  3238. +           : base date probably before 1980
  3239. +         else
  3240. +           echo "I think you are using a Netware Fileserver"
  3241. +           DECADE="8"
  3242. +         fi
  3243. +       fi
  3244. +       rm netware
  3245. +       
  3246.         cat <<EOF >${CVSROOT_DIRNAME}/first-dir/file2,v
  3247.   head                 1.5                 ;
  3248.        branch        1.2.6;
  3249. ***************
  3250. *** 11791,11802 ****
  3251.   symbols branch:1.2.6;
  3252.   locks;
  3253.   testofanewphrase @without newphrase we'd have trouble extending @@ all@ ;
  3254. ! 1.5 date 71.01.01.01.00.00; author joe; state bogus; branches; next 1.4;
  3255. ! 1.4 date 71.01.01.00.00.05; author joe; state bogus; branches; next 1.3;
  3256. ! 1.3 date 70.12.31.15.00.05; author joe; state bogus; branches; next 1.2;
  3257. ! 1.2 date 70.12.31.12.15.05; author me; state bogus; branches 1.2.6.1; next 1.1;
  3258. ! 1.1 date 70.12.31.11.00.05; author joe; state bogus; branches; next; newph;
  3259. ! 1.2.6.1 date 71.01.01.08.00.05; author joe; state Exp; branches; next;
  3260.   desc @@
  3261.   1.5 log @@ newphrase1; newphrase2 42; text @head revision@
  3262.   1.4 log @@ text @d1 1
  3263. --- 12369,12380 ----
  3264.   symbols branch:1.2.6;
  3265.   locks;
  3266.   testofanewphrase @without newphrase we'd have trouble extending @@ all@ ;
  3267. ! 1.5 date ${DECADE}1.01.01.01.00.00; author joe; state bogus; branches; next 1.4;
  3268. ! 1.4 date ${DECADE}1.01.01.00.00.05; author joe; state bogus; branches; next 1.3;
  3269. ! 1.3 date ${DECADE}0.12.31.15.00.05; author joe; state bogus; branches; next 1.2;
  3270. ! 1.2 date ${DECADE}0.12.31.12.15.05; author me; state bogus; branches 1.2.6.1; next 1.1;
  3271. ! 1.1 date ${DECADE}0.12.31.11.00.05; author joe; state bogus; branches; next; newph;
  3272. ! 1.2.6.1 date ${DECADE}1.01.01.08.00.05; author joe; state Exp; branches; next;
  3273.   desc @@
  3274.   1.5 log @@ newphrase1; newphrase2 42; text @head revision@
  3275.   1.4 log @@ text @d1 1
  3276. ***************
  3277. *** 11818,11830 ****
  3278. --- 12396,12412 ----
  3279.   EOF
  3280.         # ' Match the single quote in above here doc -- for font-lock mode.
  3281.   
  3282. +       lf_endlines ${CVSROOT_DIRNAME}/first-dir/file2,v
  3283.         # First test the default branch.
  3284.         dotest rcs-5 "${testcvs} -q update file2" "U file2"
  3285.         dotest rcs-6 "cat file2" "branch revision"
  3286.   
  3287.         # Check in a revision on the branch to force CVS to
  3288.         # interpret every revision in the file.
  3289. +       sleep ${FILESYSTEM_TICK}
  3290.         dotest rcs-6a "${testcvs} -q update -r branch file2" ""
  3291. +       sleep ${FILESYSTEM_TICK}
  3292.         echo "next branch revision" > file2
  3293.         dotest rcs-6b "${testcvs} -q ci -m mod file2" \
  3294.   "Checking in file2;
  3295. ***************
  3296. *** 11855,11888 ****
  3297.   testofanewphrase    @without newphrase we'd have trouble extending @@ all@;
  3298.   
  3299.   1\.5
  3300. ! date    71\.01\.01\.01\.00\.00;    author joe;    state bogus;
  3301.   branches;
  3302.   next    1\.4;
  3303.   
  3304.   1\.4
  3305. ! date    71\.01\.01\.00\.00\.05;    author joe;    state bogus;
  3306.   branches;
  3307.   next    1\.3;
  3308.   
  3309.   1\.3
  3310. ! date    70\.12\.31\.15\.00\.05;    author joe;    state bogus;
  3311.   branches;
  3312.   next    1\.2;
  3313.   
  3314.   1\.2
  3315. ! date    70\.12\.31\.12\.15\.05;    author me;    state bogus;
  3316.   branches
  3317.       1\.2\.6\.1;
  3318.   next    1\.1;
  3319.   
  3320.   1\.1
  3321. ! date    70\.12\.31\.11\.00\.05;    author joe;    state bogus;
  3322.   branches;
  3323.   next    ;
  3324.   newph    ;
  3325.   
  3326.   1\.2\.6\.1
  3327. ! date    71\.01\.01\.08\.00\.05;    author joe;    state Exp;
  3328.   branches;
  3329.   next    1\.2\.6\.2;
  3330.   
  3331. --- 12437,12470 ----
  3332.   testofanewphrase    @without newphrase we'd have trouble extending @@ all@;
  3333.   
  3334.   1\.5
  3335. ! date    ${DECADE}1\.01\.01\.01\.00\.00;    author joe;    state bogus;
  3336.   branches;
  3337.   next    1\.4;
  3338.   
  3339.   1\.4
  3340. ! date    ${DECADE}1\.01\.01\.00\.00\.05;    author joe;    state bogus;
  3341.   branches;
  3342.   next    1\.3;
  3343.   
  3344.   1\.3
  3345. ! date    ${DECADE}0\.12\.31\.15\.00\.05;    author joe;    state bogus;
  3346.   branches;
  3347.   next    1\.2;
  3348.   
  3349.   1\.2
  3350. ! date    ${DECADE}0\.12\.31\.12\.15\.05;    author me;    state bogus;
  3351.   branches
  3352.       1\.2\.6\.1;
  3353.   next    1\.1;
  3354.   
  3355.   1\.1
  3356. ! date    ${DECADE}0\.12\.31\.11\.00\.05;    author joe;    state bogus;
  3357.   branches;
  3358.   next    ;
  3359.   newph    ;
  3360.   
  3361.   1\.2\.6\.1
  3362. ! date    ${DECADE}1\.01\.01\.08\.00\.05;    author joe;    state Exp;
  3363.   branches;
  3364.   next    1\.2\.6\.2;
  3365.   
  3366. ***************
  3367. *** 11960,11966 ****
  3368.   next branch revision
  3369.   @"
  3370.   
  3371. !       if ${testcvs} -q update -p -D '1970-12-31 11:30 UT' file2 \
  3372.             >${TESTDIR}/rcs4.tmp
  3373.         then
  3374.           dotest rcs-9 "cat ${TESTDIR}/rcs4.tmp" "start revision"
  3375. --- 12542,12548 ----
  3376.   next branch revision
  3377.   @"
  3378.   
  3379. !       if ${testcvs} -q update -p -D "19${DECADE}0-12-31 11:30 UT" file2 \
  3380.             >${TESTDIR}/rcs4.tmp
  3381.         then
  3382.           dotest rcs-9 "cat ${TESTDIR}/rcs4.tmp" "start revision"
  3383. ***************
  3384. *** 11968,11974 ****
  3385.           fail rcs-9
  3386.         fi
  3387.   
  3388. !       if ${testcvs} -q update -p -D '1970-12-31 12:30 UT' file2 \
  3389.             >${TESTDIR}/rcs4.tmp
  3390.         then
  3391.           dotest rcs-10 "cat ${TESTDIR}/rcs4.tmp" "mid revision"
  3392. --- 12550,12556 ----
  3393.           fail rcs-9
  3394.         fi
  3395.   
  3396. !       if ${testcvs} -q update -p -D "19${DECADE}0-12-31 12:30 UT" file2 \
  3397.             >${TESTDIR}/rcs4.tmp
  3398.         then
  3399.           dotest rcs-10 "cat ${TESTDIR}/rcs4.tmp" "mid revision"
  3400. ***************
  3401. *** 11976,11982 ****
  3402.           fail rcs-10
  3403.         fi
  3404.   
  3405. !       if ${testcvs} -q update -p -D '1971-01-01 00:30 UT' file2 \
  3406.             >${TESTDIR}/rcs4.tmp
  3407.         then
  3408.           dotest rcs-11 "cat ${TESTDIR}/rcs4.tmp" "new year revision"
  3409. --- 12558,12564 ----
  3410.           fail rcs-10
  3411.         fi
  3412.   
  3413. !       if ${testcvs} -q update -p -D "19${DECADE}1-01-01 00:30 UT" file2 \
  3414.             >${TESTDIR}/rcs4.tmp
  3415.         then
  3416.           dotest rcs-11 "cat ${TESTDIR}/rcs4.tmp" "new year revision"
  3417. ***************
  3418. *** 11985,11991 ****
  3419.         fi
  3420.   
  3421.         # Same test as rcs-10, but with am/pm.
  3422. !       if ${testcvs} -q update -p -D 'December 31, 1970 12:30pm UT' file2 \
  3423.             >${TESTDIR}/rcs4.tmp
  3424.         then
  3425.           dotest rcs-12 "cat ${TESTDIR}/rcs4.tmp" "mid revision"
  3426. --- 12567,12573 ----
  3427.         fi
  3428.   
  3429.         # Same test as rcs-10, but with am/pm.
  3430. !       if ${testcvs} -q update -p -D "December 31, 19${DECADE}0 12:30pm UT" file2 \
  3431.             >${TESTDIR}/rcs4.tmp
  3432.         then
  3433.           dotest rcs-12 "cat ${TESTDIR}/rcs4.tmp" "mid revision"
  3434. ***************
  3435. *** 11994,12000 ****
  3436.         fi
  3437.   
  3438.         # Same test as rcs-11, but with am/pm.
  3439. !       if ${testcvs} -q update -p -D 'January 1, 1971 12:30am UT' file2 \
  3440.             >${TESTDIR}/rcs4.tmp
  3441.         then
  3442.           dotest rcs-13 "cat ${TESTDIR}/rcs4.tmp" "new year revision"
  3443. --- 12576,12582 ----
  3444.         fi
  3445.   
  3446.         # Same test as rcs-11, but with am/pm.
  3447. !       if ${testcvs} -q update -p -D "January 1, 19${DECADE}1 12:30am UT" file2 \
  3448.             >${TESTDIR}/rcs4.tmp
  3449.         then
  3450.           dotest rcs-13 "cat ${TESTDIR}/rcs4.tmp" "new year revision"
  3451. ***************
  3452. *** 12018,12041 ****
  3453.   description:
  3454.   ----------------------------
  3455.   revision 1\.5
  3456. ! date: 1971/01/01 01:00:00;  author: joe;  state: bogus;  lines: ${PLUS}1 -1
  3457.   \*\*\* empty log message \*\*\*
  3458.   ----------------------------
  3459.   revision 1\.4
  3460. ! date: 1971/01/01 00:00:05;  author: joe;  state: bogus;  lines: ${PLUS}1 -1
  3461.   \*\*\* empty log message \*\*\*
  3462.   ----------------------------
  3463.   revision 1\.3
  3464. ! date: 1970/12/31 15:00:05;  author: joe;  state: bogus;  lines: ${PLUS}1 -1
  3465.   \*\*\* empty log message \*\*\*
  3466.   ----------------------------
  3467.   revision 1\.2
  3468. ! date: 1970/12/31 12:15:05;  author: me;  state: bogus;  lines: ${PLUS}1 -1
  3469.   branches:  1\.2\.6;
  3470.   \*\*\* empty log message \*\*\*
  3471.   ----------------------------
  3472.   revision 1\.1
  3473. ! date: 1970/12/31 11:00:05;  author: joe;  state: bogus;
  3474.   \*\*\* empty log message \*\*\*
  3475.   ----------------------------
  3476.   revision 1\.2\.6\.2
  3477. --- 12600,12623 ----
  3478.   description:
  3479.   ----------------------------
  3480.   revision 1\.5
  3481. ! date: 19${DECADE}1/01/01 01:00:00;  author: joe;  state: bogus;  lines: ${PLUS}1 -1
  3482.   \*\*\* empty log message \*\*\*
  3483.   ----------------------------
  3484.   revision 1\.4
  3485. ! date: 19${DECADE}1/01/01 00:00:05;  author: joe;  state: bogus;  lines: ${PLUS}1 -1
  3486.   \*\*\* empty log message \*\*\*
  3487.   ----------------------------
  3488.   revision 1\.3
  3489. ! date: 19${DECADE}0/12/31 15:00:05;  author: joe;  state: bogus;  lines: ${PLUS}1 -1
  3490.   \*\*\* empty log message \*\*\*
  3491.   ----------------------------
  3492.   revision 1\.2
  3493. ! date: 19${DECADE}0/12/31 12:15:05;  author: me;  state: bogus;  lines: ${PLUS}1 -1
  3494.   branches:  1\.2\.6;
  3495.   \*\*\* empty log message \*\*\*
  3496.   ----------------------------
  3497.   revision 1\.1
  3498. ! date: 19${DECADE}0/12/31 11:00:05;  author: joe;  state: bogus;
  3499.   \*\*\* empty log message \*\*\*
  3500.   ----------------------------
  3501.   revision 1\.2\.6\.2
  3502. ***************
  3503. *** 12043,12049 ****
  3504.   mod
  3505.   ----------------------------
  3506.   revision 1\.2\.6\.1
  3507. ! date: 1971/01/01 08:00:05;  author: joe;  state: Exp;  lines: ${PLUS}1 -1
  3508.   \*\*\* empty log message \*\*\*
  3509.   ============================================================================="
  3510.         cd ..
  3511. --- 12625,12631 ----
  3512.   mod
  3513.   ----------------------------
  3514.   revision 1\.2\.6\.1
  3515. ! date: 19${DECADE}1/01/01 08:00:05;  author: joe;  state: Exp;  lines: ${PLUS}1 -1
  3516.   \*\*\* empty log message \*\*\*
  3517.   ============================================================================="
  3518.         cd ..
  3519. ***************
  3520. *** 12095,12100 ****
  3521. --- 12677,12683 ----
  3522.   EOF
  3523.         # ' Match the 3rd single quote in the here doc -- for font-lock mode.
  3524.   
  3525. +       lf_endlines ${CVSROOT_DIRNAME}/first-dir/file1,v
  3526.         dotest rcs2-1 "${testcvs} -q co first-dir" 'U first-dir/file1'
  3527.         cd first-dir
  3528.   
  3529. ***************
  3530. *** 12159,12164 ****
  3531. --- 12742,12748 ----
  3532.   C3b235f50|kingdon|<remote>|ccvs/emx|1.3|README
  3533.   M3b23af50|kingdon|~/work/*0|ccvs/doc|1.281|cvs.texinfo
  3534.   EOF
  3535. +       lf_endlines ${CVSROOT_DIRNAME}/CVSROOT/history
  3536.         dotest history-1 "${testcvs} history -e -a" \
  3537.   "O 06/04 19:48 ${PLUS}0000 anonymous ccvs     =ccvs= <remote>/\*
  3538.   W 06/17 19:51 ${PLUS}0000 anonymous       Makefile\.in ccvs/emx == <remote>/emx
  3539. ***************
  3540. *** 12337,12344 ****
  3541. --- 12921,12930 ----
  3542.   
  3543.         # OK, now add a file on a branch.  Check that the mode gets
  3544.         # set the same way (it is a different code path in CVS).
  3545. +       sleep ${FILESYSTEM_TICK}
  3546.         dotest modes-11 "${testcvs} -q tag -b br" 'T aa
  3547.   T ab'
  3548. +       sleep ${FILESYSTEM_TICK}
  3549.         dotest modes-12 "${testcvs} -q update -r br" ''
  3550.         touch ac
  3551.         dotest modes-13 "${testcvs} add ac" \
  3552. ***************
  3553. *** 12786,12791 ****
  3554. --- 13372,13378 ----
  3555.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  3556.   new revision: 1\.2; previous revision: 1\.1
  3557.   done"
  3558. +       sleep ${FILESYSTEM_TICK}
  3559.         dotest sticky-7 "${testcvs} -q update -r tag1" "[UP] file1"
  3560.         dotest sticky-8 "cat file1" ''
  3561.         dotest sticky-9 "${testcvs} -q update" ''
  3562. ***************
  3563. *** 12808,12813 ****
  3564. --- 13395,13401 ----
  3565.   done"
  3566.   
  3567.         # Now back to tag1
  3568. +       sleep ${FILESYSTEM_TICK}
  3569.         dotest sticky-15 "${testcvs} -q update -r tag1" "[UP] file1
  3570.   ${PROG} [a-z]*: file2 is no longer in the repository"
  3571.   
  3572. ***************
  3573. *** 12821,12826 ****
  3574. --- 13409,13415 ----
  3575.         dotest sticky-17 "${testcvs} -q ci -m remove-it" ""
  3576.         dotest sticky-18 "${testcvs} -q update -A" "U file1
  3577.   U file2"
  3578. +       sleep ${FILESYSTEM_TICK}
  3579.         dotest sticky-19 "${testcvs} -q update -r tag1" \
  3580.   "${PROG} [a-z]*: file1 is no longer in the repository
  3581.   ${PROG} [a-z]*: file2 is no longer in the repository"
  3582. ***************
  3583. *** 12828,12833 ****
  3584. --- 13417,13423 ----
  3585.   U file2"
  3586.   
  3587.         # Now try with a numeric revision.
  3588. +       sleep ${FILESYSTEM_TICK}
  3589.         dotest sticky-21 "${testcvs} -q update -r 1.1 file1" "U file1"
  3590.         rm file1
  3591.         dotest sticky-22 "${testcvs} rm file1" \
  3592. ***************
  3593. *** 13023,13030 ****
  3594. --- 13613,13622 ----
  3595.   
  3596.         # Test the Name keyword.  First go back to normal expansion.
  3597.   
  3598. +       sleep ${FILESYSTEM_TICK}
  3599.         dotest keyword-17 "${testcvs} update -A file1" "U file1"
  3600.   
  3601. +       sleep ${FILESYSTEM_TICK}
  3602.         echo '$''Name$' > file1
  3603.         dotest keyword-18 "${testcvs} ci -m modify file1" \
  3604.   "Checking in file1;
  3605. ***************
  3606. *** 13032,13043 ****
  3607. --- 13624,13637 ----
  3608.   new revision: 1\.2; previous revision: 1\.1
  3609.   done"
  3610.         dotest keyword-19 "${testcvs} -q tag tag1" "T file1"
  3611. +       sleep ${FILESYSTEM_TICK}
  3612.         echo "change" >> file1
  3613.         dotest keyword-20 "${testcvs} -q ci -m mod2 file1" \
  3614.   "Checking in file1;
  3615.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  3616.   new revision: 1\.3; previous revision: 1\.2
  3617.   done"
  3618. +       sleep ${FILESYSTEM_TICK}
  3619.         dotest keyword-21 "${testcvs} -q update -r tag1" "[UP] file1"
  3620.   
  3621.         # FIXME: This test fails when remote.  The second expect
  3622. ***************
  3623. *** 13083,13088 ****
  3624. --- 13677,13683 ----
  3625.         dotest keywordlog-4a "${testcvs} -q co first-dir" "U first-dir/file1"
  3626.         cd ../1/first-dir
  3627.   
  3628. +       sleep ${FILESYSTEM_TICK}
  3629.         echo 'xx $''Log$' > file1
  3630.         cat >${TESTDIR}/comment.tmp <<EOF
  3631.   First log line
  3632. ***************
  3633. *** 13094,13099 ****
  3634. --- 13689,13695 ----
  3635.   new revision: 1\.2; previous revision: 1\.1
  3636.   done"
  3637.         rm -f ${TESTDIR}/comment.tmp
  3638. +       sleep ${FILESYSTEM_TICK}
  3639.         dotest keywordlog-6 "${testcvs} -q tag -b br" "T file1"
  3640.         dotest keywordlog-7 "cat file1" \
  3641.   "xx "'\$'"Log: file1,v "'\$'"
  3642. ***************
  3643. *** 13112,13117 ****
  3644. --- 13708,13714 ----
  3645.   xx"
  3646.         cd ../../1/first-dir
  3647.   
  3648. +       sleep ${FILESYSTEM_TICK}
  3649.         echo "change" >> file1
  3650.         dotest keywordlog-10 "${testcvs} ci -m modify file1" \
  3651.   "Checking in file1;
  3652. ***************
  3653. *** 13143,13149 ****
  3654. --- 13740,13748 ----
  3655.   change"
  3656.   
  3657.         cd ../../1/first-dir
  3658. +       sleep ${FILESYSTEM_TICK}
  3659.         dotest keywordlog-14 "${testcvs} -q update -r br" "[UP] file1"
  3660. +       sleep ${FILESYSTEM_TICK}
  3661.         echo br-change >>file1
  3662.         dotest keywordlog-15 "${testcvs} -q ci -m br-modify" \
  3663.   "Checking in file1;
  3664. ***************
  3665. *** 13161,13166 ****
  3666. --- 13760,13766 ----
  3667.   xx
  3668.   br-change"
  3669.         cd ../../2/first-dir
  3670. +       sleep ${FILESYSTEM_TICK}
  3671.         dotest keywordlog-17 "${testcvs} -q update -r br" "[UP] file1"
  3672.         dotest keywordlog-18 "cat file1" \
  3673.   "xx "'\$'"Log: file1,v "'\$'"
  3674. ***************
  3675. *** 13232,13237 ****
  3676. --- 13832,13838 ----
  3677.   "U first-dir/file1
  3678.   U first-dir/file2"
  3679.         cd first-dir
  3680. +       sleep ${FILESYSTEM_TICK}
  3681.         echo 'add a line on trunk' >> file1
  3682.         dotest head-3 "${testcvs} -q ci -m modify" \
  3683.   "Checking in file1;
  3684. ***************
  3685. *** 13240,13254 ****
  3686. --- 13841,13859 ----
  3687.   done"
  3688.         dotest head-4 "${testcvs} -q tag trunktag" "T file1
  3689.   T file2"
  3690. +       sleep ${FILESYSTEM_TICK}
  3691.         echo 'add a line on trunk after trunktag' >> file1
  3692.         dotest head-5 "${testcvs} -q ci -m modify" \
  3693.   "Checking in file1;
  3694.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  3695.   new revision: 1\.3; previous revision: 1\.2
  3696.   done"
  3697. +       sleep ${FILESYSTEM_TICK}
  3698.         dotest head-6 "${testcvs} -q tag -b br1" "T file1
  3699.   T file2"
  3700. +       sleep ${FILESYSTEM_TICK}
  3701.         dotest head-7 "${testcvs} -q update -r br1" ""
  3702. +       sleep ${FILESYSTEM_TICK}
  3703.         echo 'modify on branch' >>file1
  3704.         dotest head-8 "${testcvs} -q ci -m modify" \
  3705.   "Checking in file1;
  3706. ***************
  3707. *** 13257,13262 ****
  3708. --- 13862,13868 ----
  3709.   done"
  3710.         dotest head-9 "${testcvs} -q tag brtag" "T file1
  3711.   T file2"
  3712. +       sleep ${FILESYSTEM_TICK}
  3713.         echo 'modify on branch after brtag' >>file1
  3714.         dotest head-10 "${testcvs} -q ci -m modify" \
  3715.   "Checking in file1;
  3716. ***************
  3717. *** 13265,13270 ****
  3718. --- 13871,13877 ----
  3719.   done"
  3720.         # With no sticky tags, HEAD is the head of the trunk.
  3721.         dotest head-trunk-setup "${testcvs} -q update -A" "[UP] file1"
  3722. +       sleep ${FILESYSTEM_TICK}
  3723.         dotest head-trunk-update "${testcvs} -q update -r HEAD -p file1" \
  3724.   "imported contents
  3725.   add a line on trunk
  3726. ***************
  3727. *** 13290,13296 ****
  3728. --- 13897,13905 ----
  3729.   ${PLUS} modify on branch after brtag"
  3730.   
  3731.         # With a branch sticky tag, HEAD is the head of the trunk.
  3732. +       sleep ${FILESYSTEM_TICK}
  3733.         dotest head-br1-setup "${testcvs} -q update -r br1" "[UP] file1"
  3734. +       sleep ${FILESYSTEM_TICK}
  3735.         dotest head-br1-update "${testcvs} -q update -r HEAD -p file1" \
  3736.   "imported contents
  3737.   add a line on trunk
  3738. ***************
  3739. *** 13301,13307 ****
  3740. --- 13910,13918 ----
  3741.   
  3742.         # With a nonbranch sticky tag on a branch,
  3743.         # HEAD is the head of the trunk
  3744. +       sleep ${FILESYSTEM_TICK}
  3745.         dotest head-brtag-setup "${testcvs} -q update -r brtag" "[UP] file1"
  3746. +       sleep ${FILESYSTEM_TICK}
  3747.         dotest head-brtag-update "${testcvs} -q update -r HEAD -p file1" \
  3748.   "imported contents
  3749.   add a line on trunk
  3750. ***************
  3751. *** 13314,13323 ****
  3752. --- 13925,13936 ----
  3753.   
  3754.         # With a nonbranch sticky tag on the trunk, HEAD is the head
  3755.         # of the trunk, I think.
  3756. +       sleep ${FILESYSTEM_TICK}
  3757.         dotest head-trunktag-setup "${testcvs} -q update -r trunktag" \
  3758.   "[UP] file1"
  3759.         dotest head-trunktag-check "cat file1" "imported contents
  3760.   add a line on trunk"
  3761. +       sleep ${FILESYSTEM_TICK}
  3762.         dotest head-trunktag-update "${testcvs} -q update -r HEAD -p file1" \
  3763.   "imported contents
  3764.   add a line on trunk
  3765. ***************
  3766. *** 13392,13399 ****
  3767. --- 14005,14015 ----
  3768.   ${TESTDIR}/cvsroot/first-dir/file1,v  <--  file1
  3769.   initial revision: 1\.1
  3770.   done"
  3771. +       sleep ${FILESYSTEM_TICK}
  3772.         dotest tagdate-5 "${testcvs} -q tag -b br1" "T file1"
  3773. +       sleep ${FILESYSTEM_TICK}
  3774.         dotest tagdate-6 "${testcvs} -q tag -b br2" "T file1"
  3775. +       sleep ${FILESYSTEM_TICK}
  3776.         echo trunk-2 >file1
  3777.         dotest tagdate-7 "${testcvs} -q ci -m modify-on-trunk" \
  3778.   "Checking in file1;
  3779. ***************
  3780. *** 13404,13410 ****
  3781. --- 14020,14028 ----
  3782.         # any revisions.  First the case where br2 doesn't have any
  3783.         # revisions either:
  3784.         dotest tagdate-8 "${testcvs} -q update -p -r br1 -D now" "trunk-1"
  3785. +       sleep ${FILESYSTEM_TICK}
  3786.         dotest tagdate-9 "${testcvs} -q update -r br2" "[UP] file1"
  3787. +       sleep ${FILESYSTEM_TICK}
  3788.         echo br2-1 >file1
  3789.         dotest tagdate-10 "${testcvs} -q ci -m modify-on-br2" \
  3790.   "Checking in file1;
  3791. ***************
  3792. *** 13450,13461 ****
  3793. --- 14068,14083 ----
  3794.   ${TESTDIR}/cvsroot/first-dir/file2,v  <--  file2
  3795.   initial revision: 1\.1
  3796.   done"
  3797. +       sleep ${FILESYSTEM_TICK}
  3798.         dotest multibranch2-5 "${testcvs} -q tag -b A" "T file1
  3799.   T file2"
  3800. +       sleep ${FILESYSTEM_TICK}
  3801.         dotest multibranch2-6 "${testcvs} -q tag -b B" "T file1
  3802.   T file2"
  3803.   
  3804. +       sleep ${FILESYSTEM_TICK}
  3805.         dotest multibranch2-7 "${testcvs} -q update -r B" ''
  3806. +       sleep ${FILESYSTEM_TICK}
  3807.         echo branch-B >file1
  3808.         echo branch-B >file2
  3809.         dotest multibranch2-8 "${testcvs} -q ci -m modify-on-B" \
  3810. ***************
  3811. *** 13468,13475 ****
  3812. --- 14090,14099 ----
  3813.   new revision: 1\.1\.4\.1; previous revision: 1\.1
  3814.   done"
  3815.   
  3816. +       sleep ${FILESYSTEM_TICK}
  3817.         dotest multibranch2-9 "${testcvs} -q update -r A" '[UP] file1
  3818.   [UP] file2'
  3819. +       sleep ${FILESYSTEM_TICK}
  3820.         echo branch-A >file1
  3821.         # When using cvs-1.9.20, this commit gets a failed assertion in rcs.c.
  3822.         dotest multibranch2-10 "${testcvs} -q ci -m modify-on-A" \
  3823. ***************
  3824. *** 13533,13540 ****
  3825. --- 14157,14166 ----
  3826.         # bring the changes from B to A.  Probably tests many of the
  3827.         # same code paths but might as well keep it separate, I guess.
  3828.   
  3829. +       sleep ${FILESYSTEM_TICK}
  3830.         dotest multibranch2-13 "${testcvs} -q update -r B" "[UP] file1
  3831.   [UP] file2"
  3832. +       sleep ${FILESYSTEM_TICK}
  3833.         dotest multibranch2-14 "${testcvs} -q update -r A -j B file2" \
  3834.   "[UP] file2
  3835.   RCS file: ${TESTDIR}/cvsroot/first-dir/file2,v
  3836. ***************
  3837. *** 13693,13701 ****
  3838. --- 14319,14330 ----
  3839.   ${TESTDIR}/cvsroot/first-dir/file2,v  <--  file2
  3840.   initial revision: 1\.1
  3841.   done"
  3842. +       sleep ${FILESYSTEM_TICK}
  3843.         dotest admin-7 "${testcvs} -q tag -b br" "T file1
  3844.   T file2"
  3845. +       sleep ${FILESYSTEM_TICK}
  3846.         dotest admin-8 "${testcvs} -q update -r br" ""
  3847. +       sleep ${FILESYSTEM_TICK}
  3848.         echo 'add a line on the branch' >> file1
  3849.         dotest admin-9 "${testcvs} -q ci -m modify-on-branch" \
  3850.   "Checking in file1;
  3851. ***************
  3852. *** 13963,13968 ****
  3853. --- 14592,14598 ----
  3854.         fi # end of tests skipped for remote
  3855.   
  3856.         # Add another revision to file2, so we can delete one.
  3857. +       sleep ${FILESYSTEM_TICK}
  3858.         echo 'add a line' >> file2
  3859.         dotest admin-21 "${testcvs} -q ci -m modify file2" \
  3860.   "Checking in file2;
  3861. ***************
  3862. *** 13990,14019 ****
  3863. --- 14620,14654 ----
  3864.   ${TESTDIR}/cvsroot/first-dir/aaa,v  <--  aaa
  3865.   initial revision: 1\.1
  3866.   done"
  3867. +       sleep ${FILESYSTEM_TICK}
  3868.         echo second rev >> aaa
  3869.         dotest admin-22-o3 "${testcvs} -q ci -m second aaa" \
  3870.   "Checking in aaa;
  3871.   ${TESTDIR}/cvsroot/first-dir/aaa,v  <--  aaa
  3872.   new revision: 1\.2; previous revision: 1\.1
  3873.   done"
  3874. +       sleep ${FILESYSTEM_TICK}
  3875.         echo third rev >> aaa
  3876.         dotest admin-22-o4 "${testcvs} -q ci -m third aaa" \
  3877.   "Checking in aaa;
  3878.   ${TESTDIR}/cvsroot/first-dir/aaa,v  <--  aaa
  3879.   new revision: 1\.3; previous revision: 1\.2
  3880.   done"
  3881. +       sleep ${FILESYSTEM_TICK}
  3882.         echo fourth rev >> aaa
  3883.         dotest admin-22-o5 "${testcvs} -q ci -m fourth aaa" \
  3884.   "Checking in aaa;
  3885.   ${TESTDIR}/cvsroot/first-dir/aaa,v  <--  aaa
  3886.   new revision: 1\.4; previous revision: 1\.3
  3887.   done"
  3888. +       sleep ${FILESYSTEM_TICK}
  3889.         echo fifth rev >>aaa
  3890.         dotest admin-22-o6 "${testcvs} -q ci -m fifth aaa" \
  3891.   "Checking in aaa;
  3892.   ${TESTDIR}/cvsroot/first-dir/aaa,v  <--  aaa
  3893.   new revision: 1\.5; previous revision: 1\.4
  3894.   done"
  3895. +       sleep ${FILESYSTEM_TICK}
  3896.         echo sixth rev >> aaa
  3897.         dotest admin-22-o7 "${testcvs} -q ci -m sixth aaa" \
  3898.   "Checking in aaa;
  3899. ***************
  3900. *** 14083,14090 ****
  3901. --- 14718,14728 ----
  3902.   first
  3903.   ============================================================================="
  3904.   
  3905. +       sleep ${FILESYSTEM_TICK}
  3906.         dotest admin-22-o14 "${testcvs} tag -b -r1.3 br1 aaa" "T aaa"
  3907. +       sleep ${FILESYSTEM_TICK}
  3908.         dotest admin-22-o15 "${testcvs} update -rbr1 aaa" "U aaa"
  3909. +       sleep ${FILESYSTEM_TICK}
  3910.         echo new branch rev >> aaa
  3911.         dotest admin-22-o16 "${testcvs} ci -m new-branch aaa" \
  3912.   "Checking in aaa;
  3913. ***************
  3914. *** 14106,14123 ****
  3915. --- 14744,14764 ----
  3916.   second rev
  3917.   third rev
  3918.   fourth rev"
  3919. +       sleep ${FILESYSTEM_TICK}
  3920.         echo second branch rev >> aaa
  3921.         dotest admin-22-o19 "${testcvs} ci -m branch-two aaa" \
  3922.   "Checking in aaa;
  3923.   ${TESTDIR}/cvsroot/first-dir/aaa,v  <--  aaa
  3924.   new revision: 1\.3\.2\.2; previous revision: 1\.3\.2\.1
  3925.   done"
  3926. +       sleep ${FILESYSTEM_TICK}
  3927.         echo third branch rev >> aaa
  3928.         dotest admin-22-o20 "${testcvs} ci -m branch-three aaa" \
  3929.   "Checking in aaa;
  3930.   ${TESTDIR}/cvsroot/first-dir/aaa,v  <--  aaa
  3931.   new revision: 1\.3\.2\.3; previous revision: 1\.3\.2\.2
  3932.   done"
  3933. +       sleep ${FILESYSTEM_TICK}
  3934.         echo fourth branch rev >> aaa
  3935.         dotest admin-22-o21 "${testcvs} ci -m branch-four aaa" \
  3936.   "Checking in aaa;
  3937. ***************
  3938. *** 14298,14303 ****
  3939. --- 14939,14945 ----
  3940.               
  3941.         # Add a couple more revisions
  3942.         #
  3943. +       sleep ${FILESYSTEM_TICK}
  3944.         echo "nuthr_line" >> file2
  3945.         dotest admin-27-1 "${testcvs} commit -m nuthr_line file2"  \
  3946.   "Checking in file2;
  3947. ***************
  3948. *** 14305,14310 ****
  3949. --- 14947,14953 ----
  3950.   new revision: 1\.3; previous revision: 1\.2
  3951.   done"
  3952.   
  3953. +       sleep ${FILESYSTEM_TICK}
  3954.         echo "yet_another" >> file2
  3955.         dotest admin-27-2 "${testcvs} commit -m yet_another file2"  \
  3956.   "Checking in file2;
  3957. ***************
  3958. *** 14554,14560 ****
  3959.           fail reserved-11
  3960.         fi
  3961.         cd CVSROOT
  3962. !       echo "DEFAULT ${TESTDIR}/lockme" >>commitinfo
  3963.         dotest reserved-12 "${testcvs} -q ci -m rcslock commitinfo" \
  3964.   "Checking in commitinfo;
  3965.   ${TESTDIR}/cvsroot/CVSROOT/commitinfo,v  <--  commitinfo
  3966. --- 15197,15208 ----
  3967.           fail reserved-11
  3968.         fi
  3969.         cd CVSROOT
  3970. !       sleep ${FILESYSTEM_TICK}
  3971. !       if test x"${CANT_RUN_SCRIPTS}" = x; then
  3972. !         echo "DEFAULT ${TESTDIR}/lockme" >>commitinfo
  3973. !       else
  3974. !         echo "DEFAULT ${TESTSHELL} ${TESTDIR}/lockme" >>commitinfo
  3975. !       fi
  3976.         dotest reserved-12 "${testcvs} -q ci -m rcslock commitinfo" \
  3977.   "Checking in commitinfo;
  3978.   ${TESTDIR}/cvsroot/CVSROOT/commitinfo,v  <--  commitinfo
  3979. ***************
  3980. *** 15449,15454 ****
  3981. --- 16097,16103 ----
  3982.           CPen *pMinorPen;        // pen to use for drawing minor grid lines
  3983.   d472 12
  3984.   @" > diffmerge2/sgrid.h,v
  3985. +       lf_endlines diffmerge2/sgrid.h,v
  3986.   
  3987.         # We have to put the RCS file in the repository by hand for
  3988.         # this test:
  3989. ***************
  3990. *** 15512,15518 ****
  3991.   # End of TODO list.
  3992.   
  3993.   # Remove the test directory, but first change out of it.
  3994. ! cd /tmp
  3995.   rm -rf ${TESTDIR}
  3996.   
  3997.   # end of sanity.sh
  3998. --- 16161,16167 ----
  3999.   # End of TODO list.
  4000.   
  4001.   # Remove the test directory, but first change out of it.
  4002. ! cd ${TMPDIR}
  4003.   rm -rf ${TESTDIR}
  4004.   
  4005.   # end of sanity.sh
  4006. Index: src/server.c
  4007. ===================================================================
  4008. RCS file: e:/cvsroot/ccvs/src/server.c,v
  4009. retrieving revision 1.8
  4010. retrieving revision 1.5.2.7
  4011. diff -c -r1.8 -r1.5.2.7
  4012. *** src/server.c    1998/07/13 15:25:02    1.8
  4013. --- src/server.c    1998/08/01 16:19:25    1.5.2.7
  4014. ***************
  4015. *** 364,370 ****
  4016.        * Skip over leading slash if present.  We won't bother to try to
  4017.        * make '/'.
  4018.        */
  4019. !     p = dir + 1;
  4020.       while (1)
  4021.       {
  4022.       while (*p != '/' && *p != '\0')
  4023. --- 364,370 ----
  4024.        * Skip over leading slash if present.  We won't bother to try to
  4025.        * make '/'.
  4026.        */
  4027. !     p = strchr(dir, '/') + 1;
  4028.       while (1)
  4029.       {
  4030.       while (*p != '/' && *p != '\0')
  4031. ***************
  4032. *** 624,636 ****
  4033.       free (path);
  4034.   
  4035.   #ifdef HAVE_PUTENV
  4036. !     env = malloc (strlen (CVSROOT_ENV) + strlen (CVSroot_directory) + 1 + 1);
  4037.       if (env == NULL)
  4038.       {
  4039.       pending_error = ENOMEM;
  4040.       return;
  4041.       }
  4042. !     (void) sprintf (env, "%s=%s", CVSROOT_ENV, CVSroot_directory);
  4043.       (void) putenv (env);
  4044.       /* do not free env, as putenv has control of it */
  4045.   #endif
  4046. --- 624,636 ----
  4047.       free (path);
  4048.   
  4049.   #ifdef HAVE_PUTENV
  4050. !     env = malloc (strlen (CVSROOT_ENV) + strlen (CVSroot_directory) + 8 + 1);
  4051.       if (env == NULL)
  4052.       {
  4053.       pending_error = ENOMEM;
  4054.       return;
  4055.       }
  4056. !     (void) sprintf (env, "%s=:local:%s", CVSROOT_ENV, CVSroot_directory);
  4057.       (void) putenv (env);
  4058.       /* do not free env, as putenv has control of it */
  4059.   #endif
  4060. ***************
  4061. *** 734,739 ****
  4062. --- 734,742 ----
  4063.       return;
  4064.       }
  4065.   
  4066. +     if (isabsolute (dir))
  4067. +     return;
  4068.       dir_name = malloc (strlen (server_temp_dir) + dir_len + 40);
  4069.       if (dir_name == NULL)
  4070.       {
  4071. ***************
  4072. *** 1046,1051 ****
  4073. --- 1049,1064 ----
  4074.       }
  4075.   }
  4076.   
  4077. + /* Kopt for the next file sent in Modified or Is-modified.  */
  4078. + static char *kopt;
  4079. + struct an_entry {
  4080. +     struct an_entry *next;
  4081. +     char *entry;
  4082. + };
  4083. + static struct an_entry *entries;
  4084.   /* Receive SIZE bytes, write to filename FILE.  */
  4085.   static void
  4086.   receive_file (size, file, gzipped)
  4087. ***************
  4088. *** 1057,1065 ****
  4089.       char *arg = file;
  4090.       pid_t gzip_pid = 0;
  4091.       int gzip_status;
  4092.   
  4093.       /* Write the file.  */
  4094. !     fd = CVS_OPEN (arg, O_WRONLY | O_CREAT | O_TRUNC, 0600);
  4095.       if (fd < 0)
  4096.       {
  4097.       pending_error_text = malloc (40 + strlen (arg));
  4098. --- 1070,1101 ----
  4099.       char *arg = file;
  4100.       pid_t gzip_pid = 0;
  4101.       int gzip_status;
  4102. +     int len, bin;
  4103. +     struct an_entry *ent;
  4104. +     char *p = NULL;
  4105. +     len = strlen (arg);
  4106. +     for (ent = entries; ent != NULL; ent = ent->next)
  4107. +     {
  4108. +     if ((p = strchr (ent->entry, '/')) == NULL)
  4109. +        continue;
  4110. +     if (strncmp (p+1, arg, len) == 0 && p[1+len] == '/')
  4111. +        break;
  4112. +     }
  4113. +     bin = 0;
  4114. +     if (ent != NULL)
  4115. +     {
  4116. +     p += 1+len;
  4117. +     if ((p = strchr(p+1, '/')) != NULL &&
  4118. +         (p = strchr(p+1, '/')) != NULL &&
  4119. +         strncmp(p, "/-kb/", 4) == 0)
  4120. +         bin = OPEN_BINARY;
  4121. +     }
  4122. +     else if (kopt != NULL && strcmp(kopt, "-kb") == 0)
  4123. +     bin = OPEN_BINARY;
  4124.   
  4125.       /* Write the file.  */
  4126. !     fd = CVS_OPEN (arg, O_WRONLY | O_CREAT | O_TRUNC | bin, 0600);
  4127.       if (fd < 0)
  4128.       {
  4129.       pending_error_text = malloc (40 + strlen (arg));
  4130. ***************
  4131. *** 1112,1120 ****
  4132.       }
  4133.   }
  4134.   
  4135. - /* Kopt for the next file sent in Modified or Is-modified.  */
  4136. - static char *kopt;
  4137.   static void serve_modified PROTO ((char *));
  4138.   
  4139.   static void
  4140. --- 1148,1153 ----
  4141. ***************
  4142. *** 1247,1259 ****
  4143.   {
  4144.   }
  4145.   
  4146. - struct an_entry {
  4147. -     struct an_entry *next;
  4148. -     char *entry;
  4149. - };
  4150. - static struct an_entry *entries;
  4151.   static void serve_unchanged PROTO ((char *));
  4152.   
  4153.   static void
  4154. --- 1280,1285 ----
  4155. ***************
  4156. *** 3563,3568 ****
  4157. --- 3589,3595 ----
  4158.           {
  4159.           int status, fd, gzip_status;
  4160.           pid_t gzip_pid;
  4161. +         int bin = 0;
  4162.   
  4163.           /* Callers must avoid passing us a buffer if
  4164.                      file_gzip_level is set.  We could handle this case,
  4165. ***************
  4166. *** 3571,3578 ****
  4167.           if (filebuf != NULL)
  4168.               error (1, 0, "\
  4169.   CVS server internal error: unhandled case in server_updated");
  4170. !         fd = CVS_OPEN (finfo->file, O_RDONLY | OPEN_BINARY, 0);
  4171.           if (fd < 0)
  4172.               error (1, errno, "reading %s", finfo->fullname);
  4173.           fd = filter_through_gzip (fd, 1, file_gzip_level, &gzip_pid);
  4174. --- 3598,3607 ----
  4175.           if (filebuf != NULL)
  4176.               error (1, 0, "\
  4177.   CVS server internal error: unhandled case in server_updated");
  4178. !         if (finfo->rcs->expand != NULL &&
  4179. !             strcmp(finfo->rcs->expand, "b") == 0)
  4180. !             bin = OPEN_BINARY;
  4181. !         fd = CVS_OPEN (finfo->file, O_RDONLY | bin, 0);
  4182.           if (fd < 0)
  4183.               error (1, errno, "reading %s", finfo->fullname);
  4184.           fd = filter_through_gzip (fd, 1, file_gzip_level, &gzip_pid);
  4185. ***************
  4186. *** 3597,3607 ****
  4187.           else if (filebuf == NULL)
  4188.           {
  4189.           long status;
  4190.   
  4191. !         f = CVS_FOPEN (finfo->file, "rb");
  4192.           if (f == NULL)
  4193.               error (1, errno, "reading %s", finfo->fullname);
  4194. !         status = buf_read_file (f, size, &list, &last);
  4195.           if (status == -2)
  4196.               (*protocol->memory_error) (protocol);
  4197.           else if (status != 0)
  4198. --- 3626,3640 ----
  4199.           else if (filebuf == NULL)
  4200.           {
  4201.           long status;
  4202. +         int bin = 0;
  4203.   
  4204. !         if (finfo->rcs->expand != NULL &&
  4205. !             strcmp(finfo->rcs->expand, "b") == 0)
  4206. !             bin = 1;
  4207. !         f = CVS_FOPEN (finfo->file, bin ? "rb" : "r");
  4208.           if (f == NULL)
  4209.               error (1, errno, "reading %s", finfo->fullname);
  4210. !         status = buf_read_file_to_eof (f, &list, &last);
  4211.           if (status == -2)
  4212.               (*protocol->memory_error) (protocol);
  4213.           else if (status != 0)
  4214. ***************
  4215. *** 3609,3614 ****
  4216. --- 3642,3648 ----
  4217.                  finfo->fullname);
  4218.           if (fclose (f) == EOF)
  4219.               error (1, errno, "reading %s", finfo->fullname);
  4220. +         size = buf_chain_length (list);
  4221.           }
  4222.       }
  4223.   
  4224. ***************
  4225. *** 4395,4400 ****
  4226. --- 4429,4439 ----
  4227.        int argc;
  4228.        char **argv;
  4229.   {
  4230. + #ifdef RSHD_NOT_TRANSPARENT
  4231. +     setmode (STDIN_FILENO, O_BINARY);
  4232. +     setmode (STDOUT_FILENO, O_BINARY);
  4233. +     setmode (STDERR_FILENO, O_BINARY);
  4234. + #endif
  4235.       if (argc == -1)
  4236.       {
  4237.       static const char *const msg[] =
  4238. Index: src/update.c
  4239. ===================================================================
  4240. RCS file: e:/cvsroot/ccvs/src/update.c,v
  4241. retrieving revision 1.7
  4242. retrieving revision 1.5.2.5
  4243. diff -c -r1.7 -r1.5.2.5
  4244. *** src/update.c    1998/07/13 15:25:02    1.7
  4245. --- src/update.c    1998/07/16 00:33:55    1.5.2.5
  4246. ***************
  4247. *** 487,494 ****
  4248.       time_t now;
  4249.   
  4250.       (void) time (&now);
  4251. !     if (now == last_register_time)
  4252. !         sleep (1);            /* to avoid time-stamp races */
  4253.       }
  4254.   
  4255.       return (err);
  4256. --- 487,497 ----
  4257.       time_t now;
  4258.   
  4259.       (void) time (&now);
  4260. !     if (now < last_register_time + FILESYSTEM_TICK)
  4261. !     {
  4262. !         /* to avoid time-stamp races */
  4263. !         sleep (last_register_time + FILESYSTEM_TICK - now);
  4264. !     }
  4265.       }
  4266.   
  4267.       return (err);
  4268. ***************
  4269. *** 1685,1691 ****
  4270.              violation.  */
  4271.           if (CVS_STAT (vers_ts->srcfile->path, file_info) < 0)
  4272.           error (1, errno, "could not stat %s", vers_ts->srcfile->path);
  4273. !         if (chmod (finfo->file,
  4274.                  file_info->st_mode & ~(S_IWRITE | S_IWGRP | S_IWOTH))
  4275.           < 0)
  4276.           error (0, errno, "cannot change mode of file %s", finfo->file);
  4277. --- 1688,1694 ----
  4278.              violation.  */
  4279.           if (CVS_STAT (vers_ts->srcfile->path, file_info) < 0)
  4280.           error (1, errno, "could not stat %s", vers_ts->srcfile->path);
  4281. !         if (CVS_CHMOD (finfo->file,
  4282.                  file_info->st_mode & ~(S_IWRITE | S_IWGRP | S_IWOTH))
  4283.           < 0)
  4284.           error (0, errno, "cannot change mode of file %s", finfo->file);
  4285. Index: windows-NT/ChangeLog
  4286. ===================================================================
  4287. RCS file: e:/cvsroot/ccvs/windows-NT/ChangeLog,v
  4288. retrieving revision 1.7
  4289. retrieving revision 1.5.2.3
  4290. diff -c -r1.7 -r1.5.2.3
  4291. *** windows-NT/ChangeLog    1998/07/13 15:25:15    1.7
  4292. --- windows-NT/ChangeLog    1998/07/16 00:07:30    1.5.2.3
  4293. ***************
  4294. *** 1,3 ****
  4295. --- 1,13 ----
  4296. + 1998-07-06  Murray Bishop  <bishop@acnielsen.com.au>
  4297. +     * options.h [FILESYSTEM_TICK]: Define seconds per tick as 2 for FAT.
  4298. + 1998-07-02  Murray Bishop  <bishop@acnielsen.com.au>
  4299. +     * run.c (run_popen): Don't change ' to " (breaks sanity.sh info-10).
  4300. +     * run.c (requote): Remove. Useless for Windows-NT CMD.EXE and also
  4301. +     for Windows-95 COMMAND.COM.
  4302.   1998-07-01  Jim Kingdon  <kingdon@harvey.cyclic.com>
  4303.   
  4304.       * startserver.c (wnt_shutdown_server): Check for errors from close().
  4305. ***************
  4306. *** 11,18 ****
  4307. --- 21,60 ----
  4308.       (wnt_shutdown_server): use the new global to decide whether or not
  4309.       to call socket routines or simply use close.
  4310.       
  4311. + 1998-06-23  Murray Bishop  <bishop@acnielsen.com.au>
  4312. +     * filesubr.c (rename_file): If either from or to is open in RCS
  4313. +     cache, close RCS cache before any other file operations.
  4314. + 1998-06-19  Murray Bishop  <bishop@acnielsen.com.au>
  4315.   
  4316. +     * filesubr.c (rename_readonly_file): add function so renames
  4317. +     work when using Novell IntranetWare client.
  4318. +     * filesubr.c (rename_file): try rename_readonly_file before 
  4319. +         calling error.
  4320. +     * filesubr.c (wnt_rename): try rename_readonly_file before
  4321. +         returning < 0.
  4322. + 1998-06-16  Murray Bishop  <bishop@acnielsen.com.au>
  4323. +     * config.h (CVS_RENAME): Define.
  4324. +     * filesubr.c (wnt_rename): If the oldname is open in rcs cache,
  4325. +     close it before attempting rename(). - under windows and OS/2
  4326. +     you can't rename an open file (nor pass binfiles2-10, join2-20,
  4327. +     (death-)71.
  4328. +     See also http://www.cyclic.com/cvs/dev-emx27.txt, which suggests
  4329. +     identical function (os2_rename) in emx-new/system.c.
  4330. +     * filesubr.c (expand_wild): When path whose last component is
  4331. +     "." is passed as argument, copy that rather than replacing by
  4332. +     last component of parent directory.
  4333.   1998-06-11  Jim Kingdon
  4334. +     * config.h (CVS_STAT, CVS_LSTAT): Define.
  4335. +     * filesubr.c, config.h (wnt_stat, wnt_lstat, check_statbuf):
  4336. +     New functions.
  4337. + Thu Jun 11 21:58:58 1998 by kingdon
  4338.   
  4339.       * config.h (CVS_STAT, CVS_LSTAT): Define.
  4340.       * filesubr.c, config.h (wnt_stat, wnt_lstat, check_statbuf):
  4341. Index: windows-NT/config.h
  4342. ===================================================================
  4343. RCS file: e:/cvsroot/ccvs/windows-NT/config.h,v
  4344. retrieving revision 1.4
  4345. retrieving revision 1.3.2.2
  4346. diff -c -r1.4 -r1.3.2.2
  4347. *** windows-NT/config.h    1998/06/23 15:32:10    1.4
  4348. --- windows-NT/config.h    1998/07/16 00:07:30    1.3.2.2
  4349. ***************
  4350. *** 240,245 ****
  4351. --- 240,249 ----
  4352.   #define CVS_LSTAT wnt_lstat
  4353.   extern int wnt_lstat ();
  4354.   
  4355. + /* Windows NT rename needs 'to' doesn't exist and 'from' isn't open */
  4356. + #define CVS_RENAME wnt_rename
  4357. + extern int wnt_rename(const char * from, const char * to);
  4358.   /* This function doesn't exist under Windows NT; we
  4359.      provide a stub.  */
  4360.   extern int readlink (char *path, char *buf, int buf_size);
  4361. Index: windows-NT/filesubr.c
  4362. ===================================================================
  4363. RCS file: e:/cvsroot/ccvs/windows-NT/filesubr.c,v
  4364. retrieving revision 1.6
  4365. retrieving revision 1.5.2.2
  4366. diff -c -r1.6 -r1.5.2.2
  4367. *** windows-NT/filesubr.c    1998/06/23 15:32:11    1.6
  4368. --- windows-NT/filesubr.c    1998/07/16 00:07:30    1.5.2.2
  4369. ***************
  4370. *** 23,28 ****
  4371. --- 23,29 ----
  4372.   #include "cvs.h"
  4373.   
  4374.   static int deep_remove_dir PROTO((const char *path));
  4375. + static int rename_readonly_file PROTO((const char *from, const char *to));
  4376.   
  4377.   /* Copies "from" to "to".  Note that the functionality here is similar
  4378.      to the win32 function CopyFile, but (1) we copy LastAccessTime and
  4379. ***************
  4380. *** 387,396 ****
  4381.       if (noexec)
  4382.       return;
  4383.   
  4384. !     /* Win32 unlink is stupid --- it fails if the file is read-only  */
  4385. !     chmod(to, S_IWRITE);
  4386. !     unlink(to);
  4387. !     if (rename (from, to) < 0)
  4388.       error (1, errno, "cannot rename file %s to %s", from, to);
  4389.   }
  4390.   
  4391. --- 388,394 ----
  4392.       if (noexec)
  4393.       return;
  4394.   
  4395. !     if (wnt_rename (from, to) < 0)
  4396.       error (1, errno, "cannot rename file %s to %s", from, to);
  4397.   }
  4398.   
  4399. ***************
  4400. *** 413,418 ****
  4401. --- 411,421 ----
  4402.   
  4403.       /* Win32 unlink is stupid - it fails if the file is read-only */
  4404.       chmod (f, _S_IWRITE);
  4405. +     /* And also if the file is open */
  4406. +     if (RCS_get_cached ( f ) != NULL)
  4407. +     RCS_cache_close ();
  4408.       return (unlink (f));
  4409.   }
  4410.   
  4411. ***************
  4412. *** 436,443 ****
  4413.       return (0);
  4414.   
  4415.       /* Win32 unlink is stupid - it fails if the file is read-only */
  4416. !     chmod (f, _S_IWRITE);
  4417. !     if (unlink (f) != 0)
  4418.       {
  4419.       /* under Windows NT, unlink returns EACCES if the path
  4420.          is a directory.  Under Windows 95, ENOENT.  */
  4421. --- 439,445 ----
  4422.       return (0);
  4423.   
  4424.       /* Win32 unlink is stupid - it fails if the file is read-only */
  4425. !     if (unlink_file (f) != 0)
  4426.       {
  4427.       /* under Windows NT, unlink returns EACCES if the path
  4428.          is a directory.  Under Windows 95, ENOENT.  */
  4429. ***************
  4430. *** 484,491 ****
  4431.           sprintf (buf, "%s/%s", path, dp->d_name);
  4432.   
  4433.           /* Win32 unlink is stupid - it fails if the file is read-only */
  4434. !         chmod (buf, _S_IWRITE);
  4435. !         if (unlink (buf) != 0 )
  4436.           {
  4437.           /* Under Windows NT, unlink returns EACCES if the path
  4438.              is a directory.  Under Windows 95, ENOENT.  It
  4439. --- 486,492 ----
  4440.           sprintf (buf, "%s/%s", path, dp->d_name);
  4441.   
  4442.           /* Win32 unlink is stupid - it fails if the file is read-only */
  4443. !         if (unlink_file (buf) != 0 )
  4444.           {
  4445.           /* Under Windows NT, unlink returns EACCES if the path
  4446.              is a directory.  Under Windows 95, ENOENT.  It
  4447. ***************
  4448. *** 755,760 ****
  4449. --- 756,772 ----
  4450.          As nearly as I can guess, this bug has existed since
  4451.          expand_wild was first created.  At least, it is in CVS 1.9 (I
  4452.          just tried it).  */
  4453. +     /* I (Murray Bishop) got failures on sanity.sh death2-diff-5,
  4454. +           branches2-11 and join-4, using Windows NT 4.0 fixpack 3,
  4455. +        Microsoft Visual C++ 4.2.
  4456. +        After getting nowhere with the debugger, I found the note above
  4457. +        and did some experiments on 17 June 98.
  4458. +        FindFirstFile does these strange things when cvs (1.9.27) is
  4459. +        run in /tmp/cvs-sanity/1/first-dir :
  4460. +        argv[i]        fdata.cFileName
  4461. +        .            first-dir
  4462. +        ../first-dir/.    first-dir */
  4463.   
  4464.       /* FindFirstFile doesn't return pathnames, so we have to do
  4465.          this ourselves.  Luckily, it's no big deal, since globbing
  4466. ***************
  4467. *** 822,834 ****
  4468.   
  4469.           /* Copy the file name. */
  4470.           
  4471. !         if (fncmp (argv[i] + dirname_length, fdata.cFileName) == 0)
  4472.               /* We didn't expand a wildcard; we just matched a filename.
  4473.                  Use the file name as specified rather than the filename
  4474.                  which exists in the directory (they may differ in case).
  4475.                  This is needed to make cvs add on a directory consistently
  4476.                  use the name specified on the command line, but it is
  4477.                  probably a good idea in other contexts too.  */
  4478.               strcpy (new_argv[new_argc], argv[i]);
  4479.           else
  4480.               strcat (new_argv[new_argc], fdata.cFileName);
  4481. --- 834,850 ----
  4482.   
  4483.           /* Copy the file name. */
  4484.           
  4485. !         if (fncmp (argv[i] + dirname_length, fdata.cFileName) == 0
  4486. !             || strcmp (argv[i] + dirname_length, ".") == 0)
  4487.               /* We didn't expand a wildcard; we just matched a filename.
  4488.                  Use the file name as specified rather than the filename
  4489.                  which exists in the directory (they may differ in case).
  4490.                  This is needed to make cvs add on a directory consistently
  4491.                  use the name specified on the command line, but it is
  4492.                  probably a good idea in other contexts too.  */
  4493. +             /* comparison with "." copes with FindFirstFile returning
  4494. +             name of parent directory when given "." (Thats not a
  4495. +             feature, its a bug) */
  4496.               strcpy (new_argv[new_argc], argv[i]);
  4497.           else
  4498.               strcat (new_argv[new_argc], fdata.cFileName);
  4499. ***************
  4500. *** 902,904 ****
  4501. --- 918,1044 ----
  4502.       check_statbuf (file, sb);
  4503.       return retval;
  4504.   }
  4505. + /*
  4506. +    With Windows-NT 4.0 Service Pack 3 and Novell IntranetWare Client 4.11a
  4507. +    and Microsoft Visual C++ 4.2,
  4508. +    attempts to rename readonly files fail with "Permission denied".
  4509. +    (This doesn't happen with Microsoft Netware Client, nor on NTFS local
  4510. +    file system)
  4511. +    In addition, with a Netware server version 4.11 that was built by an
  4512. +    upgrade from 4.10 without doing the filesystem backup and restore
  4513. +    Novell recommended, I get flakey failures to rename readonly files
  4514. +    (about 4 per pass of sanity.sh). The retry code below works around
  4515. +    that.
  4516. +    On a different server where 4.11 was installed on a clean machine,
  4517. +    no such problem happened.
  4518. +    Make from not readonly, try rename, restore modes on file.
  4519. +    Return what rename did.
  4520. +  */
  4521. + int
  4522. + rename_readonly_file (from, to)
  4523. +     const char *from;
  4524. +     const char *to;
  4525. + {
  4526. +     struct stat sb;
  4527. +     int rename_rc;
  4528. +     const char *final_name;
  4529. +     int rename_errno;
  4530. +     static int retrying_rename = 0;
  4531. +     if (trace)
  4532. + #ifdef SERVER_SUPPORT
  4533. +     (void) fprintf (stderr, "%c-> rename_readonly_file(%s,%s)\n",
  4534. +             (server_active) ? 'S' : ' ', from, to);
  4535. + #else
  4536. +     (void) fprintf (stderr, "-> rename_readonly_file(%s,%s)\n", from, to);
  4537. + #endif
  4538. +     if (noexec)
  4539. +     return 0;
  4540. +     /* If we can't stat from, we probably won't be able to rename it */
  4541. +     if (stat (from, &sb) < 0)
  4542. +     return -1;
  4543. +     if (chmod (from, sb.st_mode | S_IWRITE | S_IWGRP | S_IWOTH) < 0)
  4544. +     error (0, errno, "cannot change mode of file %s", from);
  4545. +     rename_rc = rename (from, to);
  4546. +     rename_errno = errno;
  4547. +     final_name = (rename_rc < 0) ? from : to;
  4548. +     if (chmod (final_name, sb.st_mode) < 0)
  4549. +     error (0, errno, "cannot restore mode of file %s", final_name);
  4550. +     /*
  4551. +     With Windows-NT 4.0 Service Pack 3 and Novell IntranetWare Client 4.11a
  4552. +     and Microsoft Visual C++ 4.2, in sanity.sh we get occasional
  4553. +     "cannot rename file .../,file3, to .../file3,v: File exists"
  4554. +     in various places (not always in same place).
  4555. +     (This doesn't happen or on NTFS local file system)
  4556. +    */
  4557. +     if (rename_rc < 0)
  4558. +     {
  4559. +     ++retrying_rename;
  4560. +     if (retrying_rename <= 3)
  4561. +         {
  4562. +         error (0, rename_errno,
  4563. +         " rename_readonly_file(%s,%s) failed. "
  4564. +         "waiting %d seconds before retry\n",
  4565. +         from, to, retrying_rename);
  4566. +         sleep( retrying_rename /*seconds*/ );
  4567. +         rename_rc = wnt_rename( from, to );
  4568. +         }
  4569. +     --retrying_rename;
  4570. +     if (retrying_rename == 0 && rename_rc == 0)
  4571. +         {
  4572. + #ifdef SERVER_SUPPORT
  4573. +         (void) fprintf (stderr, "%c retry succeeded.\n",
  4574. +         (server_active) ? 'S' : ' ');
  4575. + #else
  4576. +         (void) fprintf (stderr, " retry succeeded.\n");
  4577. + #endif
  4578. +         }
  4579. +     }
  4580. +     return rename_rc;
  4581. + }
  4582. + int wnt_rename(const char * from, const char * to)
  4583. + {
  4584. +     int rename_rc;
  4585. +     if (trace)
  4586. + #ifdef SERVER_SUPPORT
  4587. +     (void) fprintf (stderr, "%c-> wnt_rename(%s,%s)\n",
  4588. +             (server_active) ? 'S' : ' ', from, to);
  4589. + #else
  4590. +     (void) fprintf (stderr, "-> wnt_rename(%s,%s)\n", from, to);
  4591. + #endif
  4592. +     if (noexec)
  4593. +     return 0;
  4594. +     /* Win32 unlink is stupid --- it fails if the file is read-only  */
  4595. +     /* Win32 unlink also fails when file is open via Novell IntranetWare */
  4596. +     /*
  4597. +     Under windows and OS/2 you can't rename an open file, and
  4598. +     the target file must not exist before rename.
  4599. +     If you're Windows-NT on a Netware fileserver via IntranetWare,
  4600. +     the source file must not be readonly.
  4601. +     See also http://www.cyclic.com/cvs/dev-emx27.txt, which suggests
  4602. +     identical function (os2_rename) in emx-new/system.c
  4603. +     and provides the two RCS functions mentioned here.
  4604. +     */
  4605. +     unlink_file ( to );
  4606. +     if (RCS_get_cached ( from ) != NULL)
  4607. +     RCS_cache_close ();
  4608. +     rename_rc = rename ( from, to);
  4609. +     if (rename_rc < 0)
  4610. +     {
  4611. +     rename_rc = rename_readonly_file ( from, to);
  4612. +     }
  4613. +     return rename_rc;
  4614. + }
  4615. Index: windows-NT/options.h
  4616. ===================================================================
  4617. RCS file: e:/cvsroot/ccvs/windows-NT/options.h,v
  4618. retrieving revision 1.3
  4619. retrieving revision 1.3.2.1
  4620. diff -c -r1.3 -r1.3.2.1
  4621. *** windows-NT/options.h    1998/05/31 01:02:56    1.3
  4622. --- windows-NT/options.h    1998/07/16 00:07:30    1.3.2.1
  4623. ***************
  4624. *** 165,167 ****
  4625. --- 165,184 ----
  4626.   #ifndef STDC_HEADERS
  4627.   extern void exit ();
  4628.   #endif
  4629. + /*
  4630. +  * In various places, CVS waits a tick of the filesystem clock to make
  4631. +  * sure that files have different timestamps. This was coded as sleep (1).
  4632. +  * For some filesystems (eg FAT, FAT32) 2 seconds are needed.
  4633. +  * I've defined FILESYSTEM_TICK in windows-NT/options.h,
  4634. +  * and in src/cvs.h a default of 1 second is defined.
  4635. +  *
  4636. +  * I'm pretty sure that CVS doesn't do enough waiting, but it's too
  4637. +  * hard for me to figure out where to add more.
  4638. +  * See sanity.sh [FILESYSTEM_TICK] for more information.
  4639. +  */
  4640. + #ifndef FILESYSTEM_TICK
  4641. + #define FILESYSTEM_TICK 2
  4642. + /* #define FILESYSTEM_TICK 1 */
  4643. + #endif
  4644. Index: windows-NT/run.c
  4645. ===================================================================
  4646. RCS file: e:/cvsroot/ccvs/windows-NT/run.c,v
  4647. retrieving revision 1.3
  4648. retrieving revision 1.3.2.1
  4649. diff -c -r1.3 -r1.3.2.1
  4650. *** windows-NT/run.c    1998/05/31 01:02:57    1.3
  4651. --- windows-NT/run.c    1998/07/16 00:07:31    1.3.2.1
  4652. ***************
  4653. *** 296,316 ****
  4654.       }
  4655.   }
  4656.   
  4657. - static char *
  4658. - requote (const char *cmd)
  4659. - {
  4660. -     char *requoted = xmalloc (strlen (cmd) + 1);
  4661. -     char *p = requoted;
  4662. -     strcpy (requoted, cmd);
  4663. -     while ((p = strchr (p, '\'')) != NULL)
  4664. -     {
  4665. -         *p++ = '"';
  4666. -     }
  4667. -     return requoted;
  4668. - }
  4669.   FILE *
  4670.   run_popen (cmd, mode)
  4671.       const char *cmd;
  4672. --- 296,301 ----
  4673. ***************
  4674. *** 326,335 ****
  4675.       if (noexec)
  4676.       return (NULL);
  4677.   
  4678. !     /* If the command string uses single quotes, turn them into
  4679. !        double quotes.  */
  4680.       {
  4681. -         char *requoted = requote (cmd);
  4682.       /* Save and restore our file descriptors to work around
  4683.          apparent bugs in _popen.  We are perhaps better off using
  4684.          the win32 functions instead of _popen.  */
  4685. --- 311,321 ----
  4686.       if (noexec)
  4687.       return (NULL);
  4688.   
  4689. !     /* If the command string uses single quotes, don't turn them into
  4690. !        double quotes like for OS/2 CMD.EXE.
  4691. !     Windows-NT CMD.EXE and Windows-95 COMMAND.COM don't recognize
  4692. !     " as a quoting mechanism. */
  4693.       {
  4694.       /* Save and restore our file descriptors to work around
  4695.          apparent bugs in _popen.  We are perhaps better off using
  4696.          the win32 functions instead of _popen.  */
  4697. ***************
  4698. *** 337,343 ****
  4699.       int old_stdout = dup (STDOUT_FILENO);
  4700.       int old_stderr = dup (STDERR_FILENO);
  4701.   
  4702. !     FILE *result = popen (requoted, mode);
  4703.   
  4704.       dup2 (old_stdin, STDIN_FILENO);
  4705.       dup2 (old_stdout, STDOUT_FILENO);
  4706. --- 323,329 ----
  4707.       int old_stdout = dup (STDOUT_FILENO);
  4708.       int old_stderr = dup (STDERR_FILENO);
  4709.   
  4710. !     FILE *result = popen (cmd, mode);
  4711.   
  4712.       dup2 (old_stdin, STDIN_FILENO);
  4713.       dup2 (old_stdout, STDOUT_FILENO);
  4714. ***************
  4715. *** 346,352 ****
  4716.       close (old_stdout);
  4717.       close (old_stderr);
  4718.   
  4719. -     free (requoted);
  4720.       return result;
  4721.       }
  4722.   }
  4723. --- 332,337 ----
  4724.