Browse Source

cvsserver: Allow to "add" a removed file

CVS allows you to add a removed file (where the
removal is not yet committed) which will
cause the server to send the latest revision of the
file and to delete the "removed" status.

Copy this behaviour.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Frank Lichtenheld 18 years ago committed by Junio C Hamano
parent
commit
4db0c8dec5
  1. 40
      git-cvsserver.perl

40
git-cvsserver.perl

@ -360,12 +360,52 @@ sub req_add @@ -360,12 +360,52 @@ sub req_add

argsplit("add");

my $updater = GITCVS::updater->new($state->{CVSROOT}, $state->{module}, $log);
$updater->update();

argsfromdir($updater);

my $addcount = 0;

foreach my $filename ( @{$state->{args}} )
{
$filename = filecleanup($filename);

my $meta = $updater->getmeta($filename);
my $wrev = revparse($filename);

if ($wrev && $meta && ($wrev < 0))
{
# previously removed file, add back
$log->info("added file $filename was previously removed, send 1.$meta->{revision}");

print "MT +updated\n";
print "MT text U \n";
print "MT fname $filename\n";
print "MT newline\n";
print "MT -updated\n";

unless ( $state->{globaloptions}{-n} )
{
my ( $filepart, $dirpart ) = filenamesplit($filename,1);

print "Created $dirpart\n";
print $state->{CVSROOT} . "/$state->{module}/$filename\n";

# this is an "entries" line
my $kopts = kopts_from_path($filepart);
$log->debug("/$filepart/1.$meta->{revision}//$kopts/");
print "/$filepart/1.$meta->{revision}//$kopts/\n";
# permissions
$log->debug("SEND : u=$meta->{mode},g=$meta->{mode},o=$meta->{mode}");
print "u=$meta->{mode},g=$meta->{mode},o=$meta->{mode}\n";
# transmit file
transmitfile($meta->{filehash});
}

next;
}

unless ( defined ( $state->{entries}{$filename}{modified_filename} ) )
{
print "E cvs add: nothing known about `$filename'\n";

Loading…
Cancel
Save