=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/annotate.c,v retrieving revision 1.39 retrieving revision 1.40 diff -c -r1.39 -r1.40 *** src/usr.bin/cvs/annotate.c 2007/09/22 16:01:22 1.39 --- src/usr.bin/cvs/annotate.c 2007/10/09 12:22:27 1.40 *************** *** 1,7 **** ! /* $OpenBSD: annotate.c,v 1.39 2007/09/22 16:01:22 joris Exp $ */ /* - * Copyright (c) 2006 Xavier Santolaria * Copyright (c) 2007 Tobias Stoeckmann * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above --- 1,7 ---- ! /* $OpenBSD: annotate.c,v 1.40 2007/10/09 12:22:27 tobias Exp $ */ /* * Copyright (c) 2007 Tobias Stoeckmann + * Copyright (c) 2006 Xavier Santolaria * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above *************** *** 30,36 **** void cvs_annotate_local(struct cvs_file *); static int force_head = 0; - static char *rev = NULL; struct cvs_cmd cvs_cmd_annotate = { CVS_OP_ANNOTATE, 0, "annotate", --- 30,35 ---- *************** *** 64,70 **** case 'R': break; case 'r': ! rev = optarg; break; default: fatal("%s", cvs_cmd_annotate.cmd_synopsis); --- 63,69 ---- case 'R': break; case 'r': ! cvs_specified_tag = optarg; break; default: fatal("%s", cvs_cmd_annotate.cmd_synopsis); *************** *** 87,94 **** if (!(flags & CR_RECURSE_DIRS)) cvs_client_send_request("Argument -l"); ! if (rev != NULL) ! cvs_client_send_request("Argument -r%s", rev); } else { cr.fileproc = cvs_annotate_local; } --- 86,94 ---- if (!(flags & CR_RECURSE_DIRS)) cvs_client_send_request("Argument -l"); ! if (cvs_specified_tag != NULL) ! cvs_client_send_request("Argument -r%s", ! cvs_specified_tag); } else { cr.fileproc = cvs_annotate_local; } *************** *** 115,121 **** { int i; char date[10], rnum[13], *p; ! RCSNUM *crev; struct cvs_line **alines; cvs_log(LP_TRACE, "cvs_annotate_local(%s)", cf->file_path); --- 115,122 ---- { int i; char date[10], rnum[13], *p; ! RCSNUM *rev; ! struct cvs_line *line; struct cvs_line **alines; cvs_log(LP_TRACE, "cvs_annotate_local(%s)", cf->file_path); *************** *** 126,146 **** cf->file_type != CVS_FILE) return; ! if (rev == NULL) rcs_rev_getlines(cf->file_rcs, cf->file_rcsrev, &alines); else { ! crev = rcsnum_parse(rev); ! if (rcsnum_cmp(crev, cf->file_rcsrev, 0) < 0) { if (!force_head) { /* Stick at weird GNU cvs, ignore error. */ ! rcsnum_free(crev); return; } ! rcsnum_cpy(cf->file_rcsrev, crev, 0); } ! rcs_rev_getlines(cf->file_rcs, crev, &alines); ! rcsnum_free(crev); } /* Stick at weird GNU cvs, ignore error. */ --- 127,147 ---- cf->file_type != CVS_FILE) return; ! if (cvs_specified_tag == NULL) rcs_rev_getlines(cf->file_rcs, cf->file_rcsrev, &alines); else { ! rev = rcsnum_parse(cvs_specified_tag); ! if (rcsnum_cmp(rev, cf->file_rcsrev, 0) < 0) { if (!force_head) { /* Stick at weird GNU cvs, ignore error. */ ! rcsnum_free(rev); return; } ! rcsnum_cpy(cf->file_rcsrev, rev, 0); } ! rcs_rev_getlines(cf->file_rcs, rev, &alines); ! rcsnum_free(rev); } /* Stick at weird GNU cvs, ignore error. */ *************** *** 151,179 **** cvs_log(LP_RCS, "***************"); for (i = 0; alines[i] != NULL; i++) { ! rcsnum_tostr(alines[i]->l_delta->rd_num, rnum, sizeof(rnum)); strftime(date, sizeof(date), "%d-%b-%y", ! &(alines[i]->l_delta->rd_date)); ! if (alines[i]->l_len && ! alines[i]->l_line[alines[i]->l_len - 1] == '\n') ! alines[i]->l_line[alines[i]->l_len - 1] = '\0'; else { ! p = xmalloc(alines[i]->l_len + 1); ! memcpy(p, alines[i]->l_line, alines[i]->l_len); ! p[alines[i]->l_len] = '\0'; ! if (alines[i]->l_needsfree) ! xfree(alines[i]->l_line); ! alines[i]->l_line = p; ! alines[i]->l_len++; ! alines[i]->l_needsfree = 1; } cvs_printf("%-12.12s (%-8.8s %s): %s\n", rnum, ! alines[i]->l_delta->rd_author, date, alines[i]->l_line); ! if (alines[i]->l_needsfree) ! xfree(alines[i]->l_line); ! xfree(alines[i]); } xfree(alines); --- 152,181 ---- cvs_log(LP_RCS, "***************"); for (i = 0; alines[i] != NULL; i++) { ! line = alines[i]; ! ! rcsnum_tostr(line->l_delta->rd_num, rnum, sizeof(rnum)); strftime(date, sizeof(date), "%d-%b-%y", ! &(line->l_delta->rd_date)); ! if (line->l_len && line->l_line[line->l_len - 1] == '\n') ! line->l_line[line->l_len - 1] = '\0'; else { ! p = xmalloc(line->l_len + 1); ! memcpy(p, line->l_line, line->l_len); ! p[line->l_len] = '\0'; ! if (line->l_needsfree) ! xfree(line->l_line); ! line->l_line = p; ! line->l_len++; ! line->l_needsfree = 1; } cvs_printf("%-12.12s (%-8.8s %s): %s\n", rnum, ! line->l_delta->rd_author, date, line->l_line); ! if (line->l_needsfree) ! xfree(line->l_line); ! xfree(line); } xfree(alines);