patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
85 lines
3.3 KiB
Diff
85 lines
3.3 KiB
Diff
Index: contrib/cvs/src/server.c
|
|
===================================================================
|
|
RCS file: /home/ncvs/src/contrib/cvs/src/server.c,v
|
|
retrieving revision 1.1.1.15
|
|
diff -u -r1.1.1.15 server.c
|
|
--- contrib/cvs/src/server.c 15 Apr 2004 01:01:55 -0000 1.1.1.15
|
|
+++ contrib/cvs/src/server.c 20 May 2004 13:03:43 -0000
|
|
@@ -1638,8 +1638,18 @@
|
|
&& strncmp (arg, name, cp - name) == 0)
|
|
{
|
|
timefield = strchr (cp + 1, '/') + 1;
|
|
- if (*timefield != '=')
|
|
+ /* If the time field is not currently empty, then one of
|
|
+ * serve_modified, serve_is_modified, & serve_unchanged were
|
|
+ * already called for this file. We would like to ignore the
|
|
+ * reinvocation silently or, better yet, exit with an error
|
|
+ * message, but we just avoid the copy-forward and overwrite the
|
|
+ * value from the last invocation instead. See the comment below
|
|
+ * for more.
|
|
+ */
|
|
+ if (*timefield == '/')
|
|
{
|
|
+ /* Copy forward one character. Space was allocated for this
|
|
+ * already in serve_entry(). */
|
|
cp = timefield + strlen (timefield);
|
|
cp[1] = '\0';
|
|
while (cp > timefield)
|
|
@@ -1647,8 +1657,17 @@
|
|
*cp = cp[-1];
|
|
--cp;
|
|
}
|
|
- *timefield = '=';
|
|
}
|
|
+ /* If *TIMEFIELD wasn't "/", we assume that it was because of
|
|
+ * multiple calls to Is-Modified & Unchanged by the client and
|
|
+ * just overwrite the value from the last call. Technically, we
|
|
+ * should probably either ignore calls after the first or send the
|
|
+ * client an error, since the client/server protocol specification
|
|
+ * specifies that only one call to either Is-Modified or Unchanged
|
|
+ * is allowed, but broken versions of WinCVS & TortoiseCVS rely on
|
|
+ * this behavior.
|
|
+ */
|
|
+ *timefield = '=';
|
|
break;
|
|
}
|
|
}
|
|
@@ -1682,8 +1701,18 @@
|
|
&& strncmp (arg, name, cp - name) == 0)
|
|
{
|
|
timefield = strchr (cp + 1, '/') + 1;
|
|
- if (!(timefield[0] == 'M' && timefield[1] == '/'))
|
|
+ /* If the time field is not currently empty, then one of
|
|
+ * serve_modified, serve_is_modified, & serve_unchanged were
|
|
+ * already called for this file. We would like to ignore the
|
|
+ * reinvocation silently or, better yet, exit with an error
|
|
+ * message, but we just avoid the copy-forward and overwrite the
|
|
+ * value from the last invocation instead. See the comment below
|
|
+ * for more.
|
|
+ */
|
|
+ if (*timefield == '/')
|
|
{
|
|
+ /* Copy forward one character. Space was allocated for this
|
|
+ * already in serve_entry(). */
|
|
cp = timefield + strlen (timefield);
|
|
cp[1] = '\0';
|
|
while (cp > timefield)
|
|
@@ -1691,8 +1720,17 @@
|
|
*cp = cp[-1];
|
|
--cp;
|
|
}
|
|
- *timefield = 'M';
|
|
}
|
|
+ /* If *TIMEFIELD wasn't "/", we assume that it was because of
|
|
+ * multiple calls to Is-Modified & Unchanged by the client and
|
|
+ * just overwrite the value from the last call. Technically, we
|
|
+ * should probably either ignore calls after the first or send the
|
|
+ * client an error, since the client/server protocol specification
|
|
+ * specifies that only one call to either Is-Modified or Unchanged
|
|
+ * is allowed, but broken versions of WinCVS & TortoiseCVS rely on
|
|
+ * this behavior.
|
|
+ */
|
|
+ *timefield = 'M';
|
|
if (kopt != NULL)
|
|
{
|
|
if (alloc_pending (strlen (name) + 80))
|