From b5866255cbc8b33c27bebbdc509c8df0916406df Mon Sep 17 00:00:00 2001 From: Joris Vink Date: Tue, 30 May 2006 04:20:28 +0000 Subject: the moment we are done commiting a removed file, move the RCS file into the Attic and out of our way. --- usr.bin/cvs/commit.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'usr.bin/cvs/commit.c') diff --git a/usr.bin/cvs/commit.c b/usr.bin/cvs/commit.c index 4aeef771879..80a78dae576 100644 --- a/usr.bin/cvs/commit.c +++ b/usr.bin/cvs/commit.c @@ -1,4 +1,4 @@ -/* $OpenBSD: commit.c,v 1.63 2006/05/28 10:15:35 joris Exp $ */ +/* $OpenBSD: commit.c,v 1.64 2006/05/30 04:20:27 joris Exp $ */ /* * Copyright (c) 2006 Joris Vink * @@ -150,13 +150,17 @@ void cvs_commit_local(struct cvs_file *cf) { BUF *b; - int isadded; + int l, isadded; char *d, *f, rbuf[24]; CVSENTRIES *entlist; + char *attic, *repo; cvs_log(LP_TRACE, "cvs_commit_local(%s)", cf->file_path); cvs_file_classify(cf, 0); + if (cf->file_type != CVS_FILE) + fatal("cvs_commit_local: '%s' is not a file", cf->file_path); + if (cf->file_status == FILE_MODIFIED || cf->file_status == FILE_REMOVED) rcsnum_tostr(cf->file_rcs->rf_head, rbuf, sizeof(rbuf)); @@ -248,6 +252,29 @@ cvs_commit_local(struct cvs_file *cf) entlist = cvs_ent_open(cf->file_wd); cvs_ent_remove(entlist, cf->file_name); cvs_ent_close(entlist, ENT_SYNC); + + repo = xmalloc(MAXPATHLEN); + attic = xmalloc(MAXPATHLEN); + cvs_get_repository_path(cf->file_wd, repo, MAXPATHLEN); + + l = snprintf(attic, MAXPATHLEN, "%s/%s", repo, CVS_PATH_ATTIC); + if (l == -1 || l >= MAXPATHLEN) + fatal("cvs_commit_local: overflow"); + + if (mkdir(attic, 0755) == -1 && errno != EEXIST) + fatal("cvs_commit_local: failed to create Attic"); + + l = snprintf(attic, MAXPATHLEN, "%s/%s/%s%s", repo, + CVS_PATH_ATTIC, cf->file_name, RCS_FILE_EXT); + if (l == -1 || l >= MAXPATHLEN) + fatal("cvs_commit_local: overflow"); + + if (rename(cf->file_rpath, attic) == -1) + fatal("cvs_commit_local: failed to move %s to Attic", + cf->file_path); + + xfree(repo); + xfree(attic); } cvs_printf("done\n"); -- cgit v1.2.3