Code

cvsexportcommit: be graceful when "cvs status" reorders the arguments
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Mon, 18 Feb 2008 17:55:22 +0000 (17:55 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 Feb 2008 06:44:20 +0000 (22:44 -0800)
commitfef3a7cc5593d3951a5f95c92986fb9982c2cc86
tree81ce1c065ed8096c17c696bc3adaa391fee48ac1
parente5fc9a0aea2c3c49829b5cdf499339e5c759706b
cvsexportcommit: be graceful when "cvs status" reorders the arguments

In my use cases, "cvs status" sometimes reordered the passed filenames,
which often led to a misdetection of a dirty state (when it was in
reality a clean state).

I finally tracked it down to two filenames having the same basename.

So no longer trust the order of the results blindly, but actually check
the file name.

Since "cvs status" only returns the basename (and the complete path on the
server which is useless for our purposes), run "cvs status" several times
with lists consisting of files with unique (chomped) basenames.

Be a bit clever about new files: these are reported as "no file <blabla>",
so in order to discern it from existing files, prepend "no file " to the
basename.

In other words, one call to "cvs status" will not ask for two files
"blabla" (which does not yet exist) and "no file blabla" (which exists).

This patch makes cvsexportcommit slightly slower, when the list of changed
files has non-unique basenames, but at least it is accurate now.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-cvsexportcommit.perl
t/t9200-git-cvsexportcommit.sh