Skip to content

Commit

Permalink
Set permissions of each new file before "cvs add"ing it.
Browse files Browse the repository at this point in the history
Otherwise, an executable script in git would end up being
checked into the CVS repository without the execute bit.

[jc: with an additional test script from Robin Rosenberg.]

Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
meyering authored and Junio C Hamano committed Dec 4, 2006
1 parent 278fcd7 commit 7c0f702
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
13 changes: 13 additions & 0 deletions git-cvsexportcommit.perl
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@
close MSG;

my (@afiles, @dfiles, @mfiles, @dirs);
my %amodes;
my @files = safe_pipe_capture('git-diff-tree', '-r', $parent, $commit);
#print @files;
$? && die "Error in git-diff-tree";
Expand All @@ -124,6 +125,7 @@
my @fields = split(m!\s+!, $f);
if ($fields[4] eq 'A') {
my $path = $fields[5];
$amodes{$path} = $fields[1];
push @afiles, $path;
# add any needed parent directories
$path = dirname $path;
Expand Down Expand Up @@ -268,6 +270,7 @@
}

foreach my $f (@afiles) {
set_new_file_permissions($f, $amodes{$f});
if (grep { $_ eq $f } @bfiles) {
system('cvs', 'add','-kb',$f);
} else {
Expand Down Expand Up @@ -342,3 +345,13 @@ sub safe_pipe_capture {
}
return wantarray ? @output : join('',@output);
}

# For any file we want to add to cvs, we must first set its permissions
# properly, *before* the "cvs add ..." command. Otherwise, it is impossible
# to change the permission of the file in the CVS repository using only cvs
# commands. This should be fixed in cvs-1.12.14.
sub set_new_file_permissions {
my ($file, $perm) = @_;
chmod oct($perm), $file
or die "failed to set permissions of \"$file\": $!\n";
}
16 changes: 16 additions & 0 deletions t/t9200-git-cvsexportcommit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -142,4 +142,20 @@ test_expect_success \
diff F/newfile6.png ../F/newfile6.png
)'

test_expect_success 'Retain execute bit' '
mkdir G &&
echo executeon >G/on &&
chmod +x G/on &&
echo executeoff >G/off &&
git add G/on &&
git add G/off &&
git commit -a -m "Execute test" &&
(
cd "$CVSWORK" &&
git-cvsexportcommit -c HEAD
test -x G/on &&
! test -x G/off
)
'

test_done

0 comments on commit 7c0f702

Please sign in to comment.