=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/admin.c,v retrieving revision 1.63 retrieving revision 1.64 diff -c -r1.63 -r1.64 *** src/usr.bin/cvs/admin.c 2008/06/20 16:32:06 1.63 --- src/usr.bin/cvs/admin.c 2008/09/12 13:20:36 1.64 *************** *** 1,4 **** ! /* $OpenBSD: admin.c,v 1.63 2008/06/20 16:32:06 tobias Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * Copyright (c) 2005 Joris Vink --- 1,4 ---- ! /* $OpenBSD: admin.c,v 1.64 2008/09/12 13:20:36 tobias Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * Copyright (c) 2005 Joris Vink *************** *** 50,63 **** static int runflags = 0; static int lkmode = RCS_LOCK_INVAL; static char *alist, *comment, *elist, *logmsg, *logstr, *koptstr; ! static char *oldfilename, *orange, *state, *statestr; ! static RCSNUM *logrev; int cvs_admin(int argc, char **argv) { int ch; int flags; struct cvs_recursion cr; flags = CR_RECURSE_DIRS; --- 50,63 ---- static int runflags = 0; static int lkmode = RCS_LOCK_INVAL; static char *alist, *comment, *elist, *logmsg, *logstr, *koptstr; ! static char *oldfilename, *orange, *state, *staterevstr; int cvs_admin(int argc, char **argv) { int ch; int flags; + char *statestr; struct cvs_recursion cr; flags = CR_RECURSE_DIRS; *************** *** 181,186 **** --- 181,196 ---- cvs_client_send_request("Argument -q"); } else { + if (statestr != NULL) { + if ((staterevstr = strchr(statestr, ':')) != NULL) + *staterevstr++ = '\0'; + state = statestr; + if (rcs_state_check(state) < 0) { + cvs_log(LP_ERR, "invalid state `%s'", state); + state = NULL; + } + } + flags |= CR_REPO; cr.fileproc = cvs_admin_local; } *************** *** 203,208 **** --- 213,219 ---- cvs_admin_local(struct cvs_file *cf) { int i; + RCSNUM *rev; cvs_log(LP_TRACE, "cvs_admin_local(%s)", cf->file_path); *************** *** 314,332 **** } *logmsg++ = '\0'; ! if ((logrev = rcsnum_parse(logstr)) == NULL) { cvs_log(LP_ERR, "`%s' bad revision number", logstr); return; } ! if (rcs_rev_setlog(cf->file_rcs, logrev, logmsg) < 0) { cvs_log(LP_ERR, "failed to set logmsg for `%s' to `%s'", logstr, logmsg); ! rcsnum_free(logrev); return; } ! rcsnum_free(logrev); } if (orange != NULL) { --- 325,343 ---- } *logmsg++ = '\0'; ! if ((rev = rcsnum_parse(logstr)) == NULL) { cvs_log(LP_ERR, "`%s' bad revision number", logstr); return; } ! if (rcs_rev_setlog(cf->file_rcs, rev, logmsg) < 0) { cvs_log(LP_ERR, "failed to set logmsg for `%s' to `%s'", logstr, logmsg); ! rcsnum_free(rev); return; } ! rcsnum_free(rev); } if (orange != NULL) { *************** *** 351,392 **** } } ! if (statestr != NULL) { ! struct cvs_argvector *sargv; ! ! sargv = cvs_strsplit(statestr, ":"); ! if (sargv->argv[1] != NULL) { ! state = xstrdup(sargv->argv[0]); ! ! if ((logrev = rcsnum_parse(sargv->argv[1])) == NULL) { ! cvs_log(LP_ERR, "`%s' bad revision number", statestr); ! cvs_argv_destroy(sargv); ! xfree(state); return; } } else if (cf->file_rcs->rf_head != NULL) { ! state = xstrdup(statestr); ! logrev = rcsnum_alloc(); ! rcsnum_cpy(cf->file_rcs->rf_head, logrev, 0); } else { cvs_log(LP_ERR, "head revision missing"); - cvs_argv_destroy(sargv); return; } ! if (rcs_state_check(state) < 0) { ! cvs_log(LP_ERR, "invalid state `%s'", state); ! cvs_argv_destroy(sargv); ! rcsnum_free(logrev); ! xfree(state); ! return; ! } ! (void)rcs_state_set(cf->file_rcs, logrev, state); ! ! cvs_argv_destroy(sargv); ! rcsnum_free(logrev); ! xfree(state); } if (lkmode != RCS_LOCK_INVAL) --- 362,385 ---- } } ! if (state != NULL) { ! if (staterevstr != NULL) { ! if ((rev = rcsnum_parse(staterevstr)) == NULL) { ! cvs_log(LP_ERR, "`%s' bad revision number", ! staterevstr); return; } } else if (cf->file_rcs->rf_head != NULL) { ! rev = rcsnum_alloc(); ! rcsnum_cpy(cf->file_rcs->rf_head, rev, 0); } else { cvs_log(LP_ERR, "head revision missing"); return; } ! (void)rcs_state_set(cf->file_rcs, rev, state); ! rcsnum_free(rev); } if (lkmode != RCS_LOCK_INVAL)