File: show-disp.sh

package info (click to toggle)
cssc 1.0.1-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 3,612 kB
  • ctags: 1,424
  • sloc: cpp: 13,502; sh: 4,759; ansic: 2,971; perl: 342; makefile: 339; awk: 11
file content (105 lines) | stat: -rw-r--r-- 2,657 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#! /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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
#
# $Id: show-disp.sh,v 1.8 2001/09/29 19:39:41 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));
	}
    }
}'