Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Quick local CVS change scan, and bug in read?
- X-seq: zsh-workers 31411
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Quick local CVS change scan, and bug in read?
- Date: Sat, 18 May 2013 16:24:29 -0700
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
I found a couple of hosts where I had CVS checkouts of zsh, where it
is now impossible to use e.g. "cvs diff" or "cvs status" to discover
whether there are any local changes. So I whipped up the function
below to compare the date stamps on the individual files to the date
recorded for each in CVS/Entries. I thought some of you might find it
useful. (One of the few things I'm finding annoying about git is that
a cloned repository doesn't preserve file timestamps.)
In the course of testing/refining this, I discovered that some
CVS/Entries files end with the line "D" with none of the usual
field-separator slashes. When the "while IFS=/ read ..." loop
encounters such a line, it assigns type=D but leaves name, version,
date, flags, and branch set to their existing values from the previous
loop pass. I'm pretty sure this is wrong; bash read assigns empty
string to all the "unused" variables in the list. I had to change
from testing for an empty $date to testing for $type not "D".
Another problem is that the %e format in strftime is supposed to
prefix single-digit dates with a space, but zstat doesn't consistently
do that, which makes the date comparison more difficult than
necessary. For example, the leading space is present on CentOS 5 for
zsh 4.2.6 and MacOS Lion zsh version 4.3.11, but is missing on Ubuntu
10.04 zsh 4.3.10. It's also present in a fresh build of
zsh-5.0.2-88-gaa7467b on Unbutu, so I presume this to be some kind of
strange build-specific issue.
compareCVS () {
emulate -L zsh
setopt extendedglob
zmodload -i zsh/stat
for directory in **/*~(*/)#CVS*(D/)
do
(
cd $directory && if [[ -r CVS/Entries ]]
then
while IFS=/ read type name version date flags branch
do
if [[ $type != D ]]
then
builtin stat -A argv -gF '%a %b %e %T %Y' +mtime $name
[[ "${date/ / }" != "${1/ / }" ]] && print
$directory/$name ${branch:+"on branch"} ${branch#T} differs
fi
done < CVS/Entries
else
print $directory NOT IN CVS
fi
)
done
}
Messages sorted by:
Reverse Date,
Date,
Thread,
Author