summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Siegl <stesie@brokenpipe.de>2004-10-17 20:07:45 +0000
committerStefan Siegl <stesie@brokenpipe.de>2004-10-17 20:07:45 +0000
commit42a2d190380a9a145c12436f672e79baae0e2346 (patch)
tree750b5fe1da2b38dc0392639def844624eff9f6bf
parent454fcd9cc82942706abf235ebd6584325468f78b (diff)
establish new connection when retrieving pre-HEAD revisions
-rw-r--r--cvs_files.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/cvs_files.c b/cvs_files.c
index 6602dd518..f1176eb66 100644
--- a/cvs_files.c
+++ b/cvs_files.c
@@ -367,7 +367,19 @@ cvs_files_cache(struct netnode *file, struct revision *rev)
* a goodthing(TM) ...
*/
- if(cvs_connect(&send, &recv))
+ if(rev != file->revision)
+ {
+ /* we're not retrieving the head revision, thus it is likely that
+ * the HEAD revision was sent over the line in this session. However
+ * cvs server tends to transmit only one 'Mod-time' per file and
+ * session.
+ *
+ * therefore get a fresh connection ...
+ */
+ if(cvs_connect_fresh(&send, &recv))
+ return EIO;
+ }
+ else if(cvs_connect(&send, &recv))
return EIO;
/* write out request header */
@@ -431,7 +443,7 @@ cvs_files_cache(struct netnode *file, struct revision *rev)
memset(&tm, 0, sizeof(tm));
if(strptime(&buf[9], "%d %b %Y %T ", &tm))
t = mktime(&tm);
-
+
rev->time = t;
continue;
}