summaryrefslogtreecommitdiff
path: root/usr.bin/cvs
diff options
context:
space:
mode:
authorXavier Santolaria <xsa@cvs.openbsd.org>2006-12-19 11:46:40 +0000
committerXavier Santolaria <xsa@cvs.openbsd.org>2006-12-19 11:46:40 +0000
commit830b3da8bcd9664623a1ec0266ad5375f12054ee (patch)
tree1ed7840fc79add9d5af20511d842e64d40e09b45 /usr.bin/cvs
parent10f0fbacbf47f76338f2fe5572c63c96da5bb222 (diff)
add client-side support for Clear-static-directory, Clear-sticky and
Set-sticky requests. Set-sticky needs more work though.
Diffstat (limited to 'usr.bin/cvs')
-rw-r--r--usr.bin/cvs/client.c74
-rw-r--r--usr.bin/cvs/remote.h5
-rw-r--r--usr.bin/cvs/server.c8
3 files changed, 81 insertions, 6 deletions
diff --git a/usr.bin/cvs/client.c b/usr.bin/cvs/client.c
index bc6c6bf1e82..74d6cf4f3b5 100644
--- a/usr.bin/cvs/client.c
+++ b/usr.bin/cvs/client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: client.c,v 1.34 2006/12/15 15:40:28 xsa Exp $ */
+/* $OpenBSD: client.c,v 1.35 2006/12/19 11:46:39 xsa Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -739,6 +739,78 @@ cvs_client_remove_entry(char *data)
dir = cvs_remote_input();
xfree(dir);
}
+
+void
+cvs_client_clear_static_directory(char *data)
+{
+ char *dir, *fpath;
+
+ if (cvs_cmdop == CVS_OP_EXPORT)
+ return;
+
+ STRIP_SLASH(data);
+
+ dir = cvs_remote_input();
+ xfree(dir);
+
+ fpath = xmalloc(MAXPATHLEN);
+ if (cvs_path_cat(data, CVS_PATH_STATICENTRIES, fpath, MAXPATHLEN) >=
+ MAXPATHLEN)
+ fatal("cvs_client_clear_static_directory: truncation");
+
+ (void)cvs_unlink(fpath);
+
+ xfree(fpath);
+}
+
+void
+cvs_client_set_sticky(char *data)
+{
+ FILE *fp;
+ char *dir, *tag, *tagpath;
+
+ STRIP_SLASH(data);
+
+ dir = cvs_remote_input();
+ xfree(dir);
+ tag = cvs_remote_input();
+
+ tagpath = xmalloc(MAXPATHLEN);
+ if (cvs_path_cat(data, CVS_PATH_TAG, tagpath, MAXPATHLEN) >= MAXPATHLEN)
+ fatal("cvs_client_clear_sticky: truncation");
+
+ if ((fp = fopen(tagpath, "w+")) == NULL) {
+ cvs_log(LP_ERRNO, "%s", tagpath);
+ goto out;
+ }
+
+ (void)fprintf(fp, "%s\n", tag);
+ (void)fclose(fp);
+out:
+ xfree(tagpath);
+ xfree(tag);
+}
+
+void
+cvs_client_clear_sticky(char *data)
+{
+ char *dir, *tagpath;
+
+ STRIP_SLASH(data);
+
+ dir = cvs_remote_input();
+ xfree(dir);
+
+ tagpath = xmalloc(MAXPATHLEN);
+ if (cvs_path_cat(data, CVS_PATH_TAG, tagpath, MAXPATHLEN) >= MAXPATHLEN)
+ fatal("cvs_client_clear_sticky: truncation");
+
+ (void)cvs_unlink(tagpath);
+
+ xfree(tagpath);
+}
+
+
/*
* cvs_client_initlog()
*
diff --git a/usr.bin/cvs/remote.h b/usr.bin/cvs/remote.h
index d54308193ab..24f14052530 100644
--- a/usr.bin/cvs/remote.h
+++ b/usr.bin/cvs/remote.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: remote.h,v 1.12 2006/12/15 13:12:14 xsa Exp $ */
+/* $OpenBSD: remote.h,v 1.13 2006/12/19 11:46:39 xsa Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -53,6 +53,9 @@ void cvs_client_updated(char *);
void cvs_client_merged(char *);
void cvs_client_removed(char *);
void cvs_client_remove_entry(char *);
+void cvs_client_clear_static_directory(char *);
+void cvs_client_set_sticky(char *);
+void cvs_client_clear_sticky(char *);
void cvs_client_senddir(const char *);
void cvs_client_sendfile(struct cvs_file *);
diff --git a/usr.bin/cvs/server.c b/usr.bin/cvs/server.c
index f8ffcf288e3..89eda3b169c 100644
--- a/usr.bin/cvs/server.c
+++ b/usr.bin/cvs/server.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server.c,v 1.44 2006/12/15 13:12:14 xsa Exp $ */
+/* $OpenBSD: server.c,v 1.45 2006/12/19 11:46:39 xsa Exp $ */
/*
* Copyright (c) 2006 Joris Vink <joris@openbsd.org>
*
@@ -34,6 +34,9 @@ struct cvs_resp cvs_responses[] = {
{ "Merged", 0, cvs_client_merged, RESP_NEEDED },
{ "Removed", 0, cvs_client_removed, RESP_NEEDED },
{ "Remove-entry", 0, cvs_client_remove_entry, RESP_NEEDED },
+ { "Clear-static-directory", 0, cvs_client_clear_static_directory, RESP_NEEDED },
+ { "Set-sticky", 0, cvs_client_set_sticky, RESP_NEEDED },
+ { "Clear-sticky", 0, cvs_client_clear_sticky, RESP_NEEDED },
/* unsupported responses until told otherwise */
{ "New-entry", 0, NULL, 0 },
@@ -46,9 +49,6 @@ struct cvs_resp cvs_responses[] = {
{ "Checksum", 0, NULL, 0 },
{ "Copy-file", 0, NULL, 0 },
{ "Set-static-directory", 0, NULL, 0 },
- { "Clear-static-directory", 0, NULL, 0 },
- { "Set-sticky", 0, NULL, 0 },
- { "Clear-sticky", 0, NULL, 0 },
{ "Template", 0, NULL, 0 },
{ "Set-checkin-prog", 0, NULL, 0 },
{ "Set-update-prog", 0, NULL, 0 },