git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Set permissions of each new file before "cvs add"ing it.

From
Junio C Hamano <junkio@cox.net>
Date
Dec 4, 2006, 02:47 UTC
Message-ID
<7v64cstm0x.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<7vbqmktmb7.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
Show 6 quoted lines
> Jim Meyering <jim@meyering.net> writes:
>
>> Without the following patch, git-cvsexportcommit would fail to propagate
>> permissions of files added in git to the CVS repository...
> ...
> Why sed in a Perl script ;-)?
That is,...
-- >8 --
diff --git a/git-cvsexportcommit.perl b/git-cvsexportcommit.perl
index 7bac16e..7f70501 100755
--- a/git-cvsexportcommit.perl
+++ b/git-cvsexportcommit.perl
@@ -116,6 +116,7 @@ if ($opt_a) {
 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";
@@ -124,6 +125,7 @@ foreach my $f (@files) {
     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;
@@ -268,6 +270,7 @@ if (($? >> 8) == 2) {
 }
 
 foreach my $f (@afiles) {
+    set_new_file_permissions($f, $amodes[$f]);
     if (grep { $_ eq $f } @bfiles) {
       system('cvs', 'add','-kb',$f);
     } else {
@@ -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";
+}
Previous: Junio C HamanoNext: Jim Meyering
Message 3 of 5 in “Set permissions of each new file before "cvs add"ing it.”
  1. Jim MeyeringDec 3, 2006
  2. Junio C HamanoDec 4, 2006
  3. Junio C HamanoDec 4, 2006
  4. Jim MeyeringDec 4, 2006
  5. Robin RosenbergDec 4, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.