bug-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: What's remembered? "S" flag suggestion


From: Derek R. Price
Subject: Re: What's remembered? "S" flag suggestion
Date: Fri, 10 Aug 2001 11:06:34 -0400

Don't ask me!  The point of this was that I don't really have any
particularly strong opinions on this issue yet.  Convince some of the other
people out there and maybe I'll venture an opinion.  It's probably worth
noting that `cvs -qn up' seems to accomplish much the same thing as your
script (aside from the file counts), though I haven't actually tested the
script and my awk is a bit rusty.

I think I have been persuaded by the original argument in this thread that
"S" (or "T", but I'm not sure I like the overloading since for tag & rtag,
"T" can mean a branch or a static tag) is a useful status message from `cvs
update' when the user tries to update a file with a static tag.  Or perhaps
"S" for static tag and "s" for static tag but modified file or something,
but that has the potential of breaking scripts which were dependent on the
'M'.

Well, okay, I guess this deserves more discussion then.  Anyway, how about a
single warning for all files when the sticky static tag is discovered.  On
stderr probably.  It seems to me that this would provide the requested
functionality as well as preserving the old API, for the majority of cases
(bulk/recursive operations).  In the rare exceptions, the user could resort
to `cvs status' to trace the source of the problem if they wished...

Any comments?

Derek

--
Derek Price                      CVS Solutions Architect ( http://CVSHome.org )
mailto:dprice@collab.net         CollabNet ( http://collab.net )
--
"I tried to think but nothing happened!"
            - Curly

James Youngman wrote:

> "Derek R. Price" <dprice@collab.net> writes:
>
> > So if it is going to be a matter or requesting the output anyhow, the
> > information is already available via the status command.  I might be
> > behind a --brief option to status, or the like, if someone else did the
> > work.
>
> Well, if I thought that you believed the relevant functionality to be
> useful, I'd add that to my to-do list.   "cvs status --brief" would
> (if I got aroind to implementing it) emit information similar to the
> attached shell script.   Any other suggestions for "brief" info?
>
> What I'm getting at is that the shell script below works for me but
> having this functionality within CVS would make it 10% easier
> (arbitrary units...) for me to "sell" CVS to colleagues.  However, if
> you don't think that this form of output is useful then I'll not
> bother and just keep usig my shell script.  I don't want to get into a
> situation where I spen two weeks writing it and you don't like the
> _idea_.   It's OK if you don't like my _code_, I can always fix
> that...
>
> #! /bin/sh
> #
> # show-disp.sh: CVS utility to break down CVS-controlled files
> #               by their status with respect to the repository.
> #
> #    This file is part of GNU CSSC.
> #
> #    Copyright (C) 1997, 2000 Free Software Foundation, Inc.
> #
> #    This program is free software; you can redistribute it and/or modify
> #    it under the terms of the GNU General Public License as published by
> #    the Free Software Foundation; either version 2 of the License, or
> #    (at your option) any later version.
> #
> #    This program is distributed in the hope that it will be useful,
> #    but WITHOUT ANY WARRANTY; without even the implied warranty of
> #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> #    GNU General Public License for more details.
> #
> #    You should have received a copy of the GNU General Public License
> #    along with this program; if not, write to the Free Software
> #    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> #
> # $Id: show-disp.sh,v 1.7 2000/09/17 09:28:48 james_youngman Exp $
> #
>
> cvs -z3 status "$@" 2>&1 </dev/null |
>  sed \
>         -e 's/^File: no file/File:/'  |
>  sed -n -e 's/^File: \([^       ]*\).*Status: \(.*\)$/\1:\2/p' \
>         -e '/^cvs/p' | awk '
>
> BEGIN { FS=":"; dir=""; }
>
> ## Take note when we change directory.
> #
> /^cvs (status|server): Examining/ {
>         dir = $0;
>         gsub("cvs status: Examining ", "", dir);
>         gsub("cvs server: Examining ", "", dir);
>
>         if (dir == ".") {
>                 dir = "";
>         } else {
>                 dir = dir "/";
>         }
>
>         # We have now fully processed this line.
>         # Do not let any of the other rules process
>         # it.
>         next;
> }
>
> ## Print any status messages.
> #
> /^cvs status: / { print; next; }
>
> ## All other lines are Filename:Disposition
> #
> !/^cvs status:/ {
>         file_list[$2] = file_list[$2] " " dir $1;
>         ++count[$2];
> }
>
> ## Output a string, without going over 80 columns.
> #
> function output(str, startcol)
> {
>   column = startcol;
>   split(str, names, " ");
>   for (i in names)
>     {
>       len = length(names[i]);
>       if (column + len > 78) {
>         # Begin printing at column startcol on the new line.
>         printf("\n%*s", startcol, "");
>         column = startcol;
>       }
>       printf("%s ", names[i]);
>       column += ( len + 1);
>     }
>   printf("\n");
> }
>
> ## At the end of procressing, indicate the dispositions of
> ## files other than those that are Up-to-date.
> #
> END {
>   n_up2date = count["Up-to-date"];
>   if (n_up2date > 0) {
>         printf("%d files Up-to-date.\n", n_up2date);
>   }
>
>   for (disposition in file_list)
>     {
>       if (disposition != "Up-to-date")
>         {
>           prefix = sprintf("%s: %d: ",
>                         disposition,
>                         count[disposition]);
>           printf("%s", prefix);
>           output(file_list[disposition], length(prefix));
>         }
>     }
> }'
>
> --
> James Youngman
> Manchester, UK.  +44 161 226 7339
> PGP (GPG) key ID for <jay@gnu.org> is 64A95EE5 (F1B83152).




reply via email to

[Prev in Thread] Current Thread [Next in Thread]